2016-09-29 8 views
-1

Wie definiert man eine Datumsvariable und weist diese Variable aus der Tabelle in Oracle zu?Definieren Sie eine Datumsvariable in Oracle

Ich habe versucht, unter

DEFINE EXTRACTION_DATE = SELECT DATA_EXTRACTION_DATE FROM tbl1 

SELECT PA.PERSON_ID,A.PERIOD_END_DATE,PA.OPT_OUT_OF_PLAN_DATE,A.TERMINATION_DATE, 
     CASE WHEN A.PERIOD_END_DATE <= ADD_MONTHS(TRUNC(&EXTRACTION_DATE), -3) THEN 'Y' ELSE 'N' END 
    FROM 
    tbl2 

es ungültige Anweisung Fehler zu werfen.

Es ist kein Duplikat eines anderen. Weil ich Variable von der Tabelle nicht durch statische Variable erhalten muss.

+2

Wo in das Oracle-Handbuch hast du diese Syntax gefunden? –

+0

Ich bin neu bei Oracle Ich verweise nur einige Website ...... Ich brauche die Syntax genau gleich wie sql DECLARE-Anweisung – Domnic

+1

Mögliche Duplikate von [Wie deklariert Variable und verwenden Sie es in der gleichen SQL-Skript? (Oracle SQL)] (http://stackoverflow.com/questions/3564283/how-to-declare-variable-and-use-it-in-the-same-sql-script-oracle-sql) – hemalp108

Antwort

0

Versuchen Sie so etwas wie: -

declare 

var1 <dtatatype same as your table column>; 
var2 <dtatatype same as your table column>;  
var3 <dtatatype same as your table column>; 
var4 <dtatatype same as your table column>;  
var5 <dtatatype same as your table column>; 

var_dt date; 

begin 


SELECT EXTRACTION_DATE 
into var_dt 
FROM tbl1; 


SELECT PA.PERSON_ID, 
     A.PERIOD_END_DATE, 
     PA.OPT_OUT_OF_PLAN_DATE, 
     A.TERMINATION_DATE, 
     CASE WHEN A.PERIOD_END_DATE <= ADD_MONTHS(var_dt), -3) 
     THEN 'Y' 
     ELSE 'N' END 
    into 
     var1, 
     var2, 
     . 
     . 
     var5 
    FROM  tbl2; 

end; 
+0

Dosis Oracle-Unterstützung die "In" -Syntax? – Domnic

+0

Ich denke, dass Sie einige Grundlagen zuerst benötigen, las http://docstore.mik.ua/orelly/oracle/prog2/ch15_03.htm – XING

0

Ich nicht vollständig verstehen, was Sie tyring so weit zu tun, aber wie ich verstehen können Sie eine Variable so eingestellt, wie folgt

1 -) wenn Sie schreiben, eine Prozedur,

declare 
EXTRACTION_DATE date; 

begin 
    SELECT DATA_EXTRACTION_DATE into EXTRACTION_DATE FROM tbl1; 
end; 

2 -) wenn Ihre Daten Verweis auf eine Tabelle, können Sie Benutzer Cursor

declare 
cursor crs is SELECT * into EXTRACTION_DATE FROM tbl1; 

then use crs in for loop 

3 -) Sie können obere Abfrage in Ihrer zweiten Abfrage schreiben.

SELECT PA.PERSON_ID,A.PERIOD_END_DATE,PA.OPT_OUT_OF_PLAN_DATE,A.TERMINATION_DATE, 
     CASE WHEN A.PERIOD_END_DATE <= ADD_MONTHS(TRUNC(SELECT DATA_EXTRACTION_DATE FROM tbl1), -3) THEN 'Y' ELSE 'N' END 
    FROM 
    tbl2 
+0

das ist für SQL-Syntax .. Ich brauche dies in Oracle-Syntax – Domnic

+0

das ist für Oracle-Syntax @ Domnic.Ich arbeite an Oracle 11g – FreeMan

0

Ich gehe davon aus, dass dies für eine Art von Skript erforderlich ist. Wenn ja, können Sie dies mit dem COLUMN Befehl und seine new_value Parameter in SQL * Plus:

SQL> column my_val new_value my_val_subst_param 
SQL> define my_val_subst_param 
Symbol my_val_subst_param is UNDEFINED 

SQL> select 'hello!' my_val from dual; 
MY_VAL 
------ 
hello! 

SQL> select '&my_val_subst_param' some_val from dual; 
'HELLO!' 
-------- 
hello! 

empfehle ich Ihnen, lesen Sie alle this article und insbesondere this section.

ETA: Denken Sie daran, dass, wenn Sie diese Methode verwenden, Daten ausgegeben werden als Strings, so dass Sie sicherstellen müssen, dass Sie die entsprechende Umwandlung in Ihrer SELECT-Anweisung zu tun, zB .:

SQL> column dt new_value dt_val 
SQL> select to_char(sysdate, 'dd/mm/yyyy') dt from dual; 
DT 
---------- 
29/09/2016 

SQL> define dt_val; 
DEFINE DT_VAL   = "29/09/2016" (CHAR) 

SQL> select * from dual where trunc(sysdate) = to_date('&dt_val', 'dd/mm/yyyy'); 
DUMMY 
----- 
X 
Verwandte Themen