2013-12-09 32 views
3

我想在SQL Developer中運行以下查詢,但我收到一個錯誤。我試圖聲明兩個局部變量(var_num1和payDate),然後設置變量。有誰知道我可以做錯嗎?我知道Oracle SQL與SQL Server有點不同。Oracle PL/SQL選擇到變量

DECLARE 
    var_num1 number; 
    payDate date; 
BEGIN 
    var_num1 := 100; 
    payDate := '10/1/2013' 
    BEGIN 
    SELECT * FROM Paycode WHERE PaycodeID = var_num1 and PaycodeDate = payDate; 
    End; 
END; 

Error report: 
ORA-06550: line 6, column 2: 
PLS-00428: an INTO clause is expected in this SELECT statement 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 
+0

這是一個PL/SQL塊,而不是查詢。 –

回答

7

不能使用SELECT INTO沒有在PL/SQL子句。 SELECT的輸出必須存儲在某處。例如。表或變量或者記錄。請參閱下面的示例,瞭解如何將SELECT語句的結果存儲到記錄中。

DECLARE 
    var_num1 number; 
    payDate date; 
    v_result Paycode%ROWTYPE; 
BEGIN 
    var_num1 := 100; 
    payDate := '10/1/2013'; 

    SELECT * INTO v_result 
    FROM Paycode 
    WHERE PaycodeID = var_num1 and PaycodeDate = payDate; 

END; 
+0

謝謝你的回覆。是「v_result」變量還是表?我不想創建一個表。 – user3083460

+1

它基本上是一個存儲在變量中的行(有些可能會調用該對象)。在選擇表格中的所有列時(使用*),存儲整行內容的方式很常見,請參見http://www.oracle.com/technetwork/issue-archive/2012/12-may/o32plsql-1578019.html – tvm

+0

哦,太棒了,所以它實際上並沒有創建物理行或表?這只是在查詢執行時才存儲在內存中,對嗎?謝謝你的幫助。 – user3083460

0

如果您想要使用此代碼塊返回SQL Developer中的結果集,您需要爲查詢打開一個參考光標,例如,

DECLARE 
    refCur REF CURSOR; 
    refc refCur; 
    var_num1 number; 
    payDate date; 
    v_result Paycode%ROWTYPE; 
BEGIN 
    var_num1 := 100; 
    payDate := '10/1/2013'; 

OPEN refc FOR 
    SELECT * 
    FROM Paycode 
    WHERE PaycodeID = var_num1 and PaycodeDate = payDate; 

END;