2016-08-03 32 views
0

如何在select語句中使用我的日期變量?我必須使用INTO嗎?爲什麼我不能聲明變量,然後在其中運行帶有變量的select語句?PLSQL日期變量然後在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

fyi,'TO_DATE('1-MAY-2016')'應該是'date'2016-05-01'。如果不指定格式掩碼,那麼使用'to_date()'沒有多大意義。 –

回答

1

您只能從表或視圖中選擇,而不是變量。您的模式中沒有表格或視圖,稱爲wtf,因此是錯誤。要查看變量wtf的內容,用此代替'select * from wtf;'

dbms_output.put_line(wtf); 

和移動它的匿名塊的'END'內。

我得到'201620'的方式:-)

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;