2012-10-31 53 views
0

我很好奇PL/SQL爲什麼不讓我聲明var作爲datetime以及我的替代選擇是什麼。我使用的是Oracle 11在PL/SQL中聲明var作爲日期

VARIABLE some_date date; 

我也得到指示的法律類型的變種以下錯誤消息,日期不被包括:

Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR 
(n [CHAR|BYTE]) | 
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) | 
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR | 
BINARY_FLOAT | BINARY_DOUBLE ] ] 

我也許可以解決此問題通過模擬日期作爲一個字符串或長表示,但我真的很好奇爲什麼這樣。

謝謝

+2

'VARIABLE'是一個[SQL * Plus命令(HTTP://文檔。 oracle.com/cd/E11882_01/server.112/e16604/ch_twelve050.htm),而不是PL/SQL之一。您可以在SQL * Plus(或SQL Developer)中將它用作普通SQL以及PL/SQL中的綁定變量。儘管如此,這與PL/SQL沒有直接關係。 –

回答

0

在PL/SQL中,關鍵字VARIABLE不在您的上下文中。它用於創建綁定變量 綁定變量是在環境中創建的,而不是在PL/SQL塊的聲明部分中創建的。在PL/SQL塊中聲明的變量只有在執行該塊時纔可用。在塊被執行後,變量使用的內存被釋放。但是,即使在塊被執行後,綁定變量也是可訪問的。因此,創建時,綁定變量可以被多個子程序使用和操縱。它們可以像任何其他變量一樣在SQL語句和PL/SQL塊中使用。這些變量可以作爲運行時值傳入或傳出PL/SQL子程序。

例如,對於變量:

VARIABLE b_result DATW 
BEGIN 
    SELECT JOIN_DATE INTO :b_result 
    FROM employees WHERE employee_id = 144; 
END; 
/
PRINT b_result 

我對你的感覺,打擊會達到目的

DECLARE 
    some_date DATE; 
BEGIN 
    -- other code 
END; 
1

我想你的意思是SQL * Plus而不是PL/SQL,對不對? 您可以使用VARCHAR2,並使用to_char()to_date()將兩者之間的PL/SQL代碼轉換。

+1

不,我的意思是PL/SQL – amphibient

+0

是的,但爲什麼他們不允許'日期'?它們允許您可以在表格中使用其他數據類型。基本上,爲什麼允許的var數據類型只是表中可用的那些數據的子集? – amphibient

0

不要用變量關鍵字聲明變量。你需要的只是變量名和聲明塊中的類型,PL/SQL將負責其餘的部分。

$DECLARE 
$ some_date DATE; 
$BEGIN 
$ -- other code 
$END;