2011-07-28 89 views
4

我正在使用Oracle 10g,並且需要在的where子句中使用變量SELECT;例如。在SELECT語句中使用聲明變量

DECLARE 
v_blah NUMBER; 
BEGIN 

v_blah := 13; 

SELECT * FROM PEOPLE p WHERE p.LuckyNumber = v_blah; 

END; 

,但我得到一個錯誤說

PLS-00428:INTO子句預計在SELECT語句

似乎在DELETE或INSERT語句做工精細,所以我不確定爲什麼它不會在這裏工作。

+0

我對此感到困惑......應該工作:( – War

+2

歡迎來到Oracle。它不是SQL Server ;-) –

回答

3

正確的語法是:

DECLARE 
    v_blah NUMBER := 13; 
    v_people_rec PEOPLE%ROWTYPE; 
BEGIN 
    SELECT * INTO v_people_rec FROM PEOPLE p WHERE p.LuckyNumber = v_blah; 
END; 

select statement in PL/SQL要求,其中存儲查詢結果的地方。在這個例子中,這個地方是v_people_rec變量。

上面的例子預計只有一行被返回。在其他情況下,它會拋出異常NO_DATA_FOUNDTOO_MANY_ROWS

3

這與您的參數無關,這是因爲您將代碼作爲過程性代碼塊執行,因此它不允許您選擇任何內容。

你想對查詢的結果做什麼?將它顯示到屏幕上?如果是這樣,請將其選中到一個遊標,並遍歷並使用dbms_output。

+0

我想返回該行。這將是更大的一部分,插入,然後返回插入的行類型的查詢。 – Jacob

+2

在這種情況下,您需要將結果選擇到光標中。 – DoctorMick