如何在select语句中使用我的日期变量?我必须使用INTO吗?为什么我不能声明变量然后运行带变量的select语句?
到目前为止,这是我的代码,我收到的错误表或视图不存在。请告诉我如何纠正这个,以及一个更简单的方法来声明变量然后运行select语句。
DECLARE
mySysDate DATE := TO_DATE('1-MAY-2016');
wtf varchar(512);
BEGIN
select
CASE
WHEN to_char(mySysDate, 'mm') BETWEEN 08 AND 12 THEN to_char(add_months(mySysDate, 12), 'YYYY') || '10'
WHEN to_char(mySysDate, 'mm') BETWEEN 01 AND 05 THEN to_char(mySysDate, 'YYYY') || '20'
WHEN to_char(mySysDate, 'mm') BETWEEN 06 AND 07 THEN to_char(mySysDate, 'YYYY') || '30'
ELSE 'X'
END AS CurrentTerm
into wtf
from dual;
END;
select * from wtf;
答案 0 :(得分:1)
您只能从表格或视图中进行选择,而不能从变量中进行选择。您的架构中没有名为wtf
的表或视图,因此出现错误。要查看变量wtf
的内容,请使用此代替'select * from wtf;'
dbms_output.put_line(wtf);
并将其移至匿名块的'END'
内。
顺便说一句,我得到'201620'
: - )
答案 1 :(得分:0)
Gary_W是正确的,但将select语句更改为此是一个更好的解决方案。这里没有太多需要从双重选择,一个简单的赋值语句工作正常。提取也应该比to_char更好,更逻辑地执行。
wtf := CASE
WHEN extract(month from mySysDate) BETWEEN 08 AND 12 THEN to_char(add_months(mySysDate, 12), 'YYYY') || '10'
WHEN extract(month from mySysDate) BETWEEN 01 AND 05 THEN to_char(mySysDate, 'YYYY') || '20'
WHEN extract(month from mySysDate) BETWEEN 06 AND 07 THEN to_char(mySysDate, 'YYYY') || '30'
ELSE 'X'
END;