我创建了一个PL / SQL函数,我在SQL查询中有一个case
表达式。这工作正常,但是当我添加另一个when
条件时,它将无法编译。即使我使用when ... and 2 > 1
,也不会编译。
在下面的代码中,注释部分无法正常工作。
我想要的是在我的when
子句中再添加一个检查。请指教。
create or replace function FUNCTION_NAME (date1 in varchar2,value1 in varchar2)
RETURN date
IS
date2 date;
BEGIN
SELECT D DATE2
INTO DATE2 FROM (SELECT CASE (SELECT TO_DATE(MAX(G.DATE3),'DD-MON-YYYY')
FROM TABLE1 G,
TABLE2 N
WHERE G.DATE3=N.DATE3)
WHEN LAST_DAY(TO_DATE(DATE1,'DD-MON-YYYY'))
/* AND MONTHS_BETWEEN (LAST_DAY(TO_DATE(SYSDATE)),
LAST_DAY(TO_DATE(TO_CHAR(DATE1),'DD-MON-YYYY'))) */
THEN LAST_DAY(TO_DATE(DATE1,'DD-MON-YYYY'))
ELSE
TO_DATE('31-DEC-99','DD-MON-YYYY')
END D
FROM DUAL);
RETURN DATE2;
END;
答案 0 :(得分:1)
你所拥有的是案例表达(不是案例陈述)。
案例表达有两种:“简单”(case <expr> when val1 then ... when val2 then...
等)和“搜索”(case when condition1 then ... when condition2 then ...
等。)
您将案例表达式编写为简单的案例表达式。那么,您不能为WHEN部分添加条件。您必须将案例表达式更改为“一直搜索”。
case when (select ...) = last_day(...) AND <your commented condition> THEN .....
编辑 - 在我的答案下方复制部分澄清评论。
简单的案例表达:
case x when 1 then ....
也可以写为搜索案例表达式:
case when x = 1 then ....
这两个在逻辑上是等价的。但是,如果我们要在WHEN部分添加“AND 3&gt; 1”,则仅适用于案例表达式的搜索形式。
答案 1 :(得分:1)
简单案例:
select case dummy
when 'X' then 1
end as case_demo
from dual;
搜索案例:
select case
when dummy = 'X' then 1
end as case_demo
from dual;
在你的查询中,你将它们混合起来,这样做无效:
select case dummy
when 'X' and 1 = 1
then 1
end as case_demo
from dual;
如果切换到“已搜索的CASE”,则可以添加更多when
条件:
select case
when dummy = 'X' and 1 = 1
then 1
end as case_demo
from dual;