参考了下以下的网址:
关于Oracle WHERE后面跟判断语句问题 - 开发者知识库q
工作遇到一个问题:如果传入的分区变量 P_REPORT_TYPE 是’ALL‘时,那么就要将所有的公司编码 COMPANY_CODE 输出,但如果不是'ALL',那么就需要根据传入的另一个变量 P_COMPANY_CODE 来只输出这个公司编码(COMPANY_CODE = P_COMPANY_CODE )
找了半天发现,有个where ( or )这个方法,根据上面的参考总结了下:
where 条件1
AND ( 条件2 or (条件3))
-- 如果条件2 为真则执行条件2 否则执行条件3
测试:
DECLARE
CC VARCHAR2(50) := 'ALL';
BEGIN
SELECT DISTINCT SALES_CATEGORY_NAME FROM DM_CST_ALLOCATION_COMMON_REPORT_LZJ
WHERE BRAND_NAME ='添宁' AND ('ALL' = 'ALL' OR (SALES_CATEGORY_NAME = '护理垫'));
END;
-- 此时会输出所有的添宁品牌的产品分类
DECLARE
CC VARCHAR2(50) := '';
BEGIN
SELECT DISTINCT SALES_CATEGORY_NAME FROM DM_CST_ALLOCATION_COMMON_REPORT_LZJ
WHERE BRAND_NAME ='添宁' AND ('ALL' = 'ALL' OR (SALES_CATEGORY_NAME = '护理垫'));
END;
-- 此时只会输出添宁品牌的‘护理垫’的产品分类
实际作业中也可以解决:
AND (P_REPORT_TYPE = 'ALL' OR (CA.COMPANY_CODE = V_COMPANY_CODE))
--AND CA.COMPANY_CODE = V_COMPANY_CODE --曾经代码