2016-08-03 7 views
0

Wie verwende ich meine Datumsvariable in Select-Anweisung? Muss ich INTO verwenden? Warum kann ich nicht einfach eine Variable deklarieren und dann eine SELECT-Anweisung mit einer Variablen ausführen?PLSQL Datumsvariable dann in Select ausgeführt

Hier ist mein Code so weit, ich bekomme Fehler Tabelle oder Ansicht existiert nicht. Bitte zeigen Sie mir, wie dies zu korrigieren und auch eine einfachere Möglichkeit, Variable zu deklarieren, dann Select-Anweisung ausführen.

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-MAI-2016 ')' sollte 'date' 2016-05-01' sein. Es gibt wenig Sinn, 'to_date()' zu verwenden, wenn Sie keine Formatmaske angeben. –

Antwort

1

Sie können nur aus einer Tabelle oder Ansicht auswählen, keine Variable. Es gibt keine Tabelle oder Sicht in Ihrem Schema namens wtf, daher der Fehler. Um den Inhalt der Variablen wtf, verwenden Sie diese anstelle von 'select * from wtf;'

dbms_output.put_line(wtf); 

und bewegen es in der 'END' des anonymen Block.

ich '201620' die übrigens :-)

0

Gary_W korrekt ist, aber dies Ihre Select-Anweisung zu ändern ist eine bessere Lösung. Es gibt hier nicht viel Auswahl von Dual, eine einfache Zuweisung funktioniert gut. Extrakt sollte auch besser und logischer als ein to_char ausführen.

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;