2016-09-29 454 views
-1

如何定義日期變量並從oracle的表中分配該變量?在Oracle中定義日期變量

我試過下面

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 

它拋出無效的語句錯誤。

其不重複另一個。因爲我需要從表中獲取變量而不是通過靜態變量。

+2

在哪裏Oracle手冊是否找到了該語法? –

+0

我是新來的Oracle我只是指一些網站......我需要的語法完全相同,像sql DECLARE語句 – Domnic

+1

可能的重複[如何聲明變量並在同一個SQL腳本中使用它? (Oracle SQL)](http://stackoverflow.com/questions/3564283/how-to-declare-variable-and-use-it-in-the-same-sql-script-oracle-sql) – hemalp108

回答

0

試着這麼做: -

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

劑量oracle支持「入」語法? – Domnic

+0

我想你首先需要一些基礎知識,閱讀http://docstore.mik.ua/orelly/oracle/prog2/ch15_03.htm – XING

0

我不完全理解你tyring做的,但據我瞭解 你可以設置一個變量這樣一種方式如下

1什麼 - )如果你寫一個程序,

declare 
EXTRACTION_DATE date; 

begin 
    SELECT DATA_EXTRACTION_DATE into EXTRACTION_DATE FROM tbl1; 
end; 

2 - )如果您的數據參照表,可以用戶光標

declare 
cursor crs is SELECT * into EXTRACTION_DATE FROM tbl1; 

then use crs in for loop 

3 - )您可以在第二個查詢中編寫上層查詢。

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

這是用於SQL語法..我需要這在Oracle語法 – Domnic

+0

這是用於Oracle語法@ Domnic.I正在研究Oracle 11g – FreeMan

0

我打算假設這是某種腳本所必需的。如果是這樣,你可以使用COLUMN命令和SQL *其new_value參數加上做到這一點:

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! 

我強烈建議你閱讀所有的this article,特別this section

ETA:請記住,如果你使用這種方法,日期爲字符串輸出,所以你必須確保你做適當的轉換在SELECT語句,如:

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