PLSQL日期变量然后在select中运行

时间:2016-08-03 18:49:43

标签: plsql

如何在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;

2 个答案:

答案 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;
相关问题