2012-03-29 58 views
3

我想要抓住一個特定的列值a.id,並將其存儲到一個變量v_id。然後使用此值傳遞到存儲過程。期待時所遇到的 符號 「V_ID」:選擇一個單獨列的值,並將其存儲在變量的Oracle SQL

DECLARE v_id a.id%TYPE; 
BEGIN 
SELECT id into v_id from a where a.name='test' and rownum <2 order by id desc; 
Print v_id; 
doSomething(v_id); 
END; 
/

我得到這個錯誤在Oracle SQL Developer中:

錯誤報告:ORA-06550:第3行,第7列:PLS-00103以下之一:

:=。 (@%;符號「:=」替換爲「V_ID」爲 繼續。 06550. 00000 - 「行%s,列%s:\ n%s」 *原因:通常PL/SQL編譯錯誤。 *操作:

回答

10

如果你想使用rownumorder by在一個子查詢放的順序。沒有其他方法可以保證您獲得正確的價值。

這也是很好的做法來處理的可能性,有可能不是一個id你的查詢相匹配。我已經添加了一個額外的begin... end;區塊來解決這個問題。

declare 
    v_id a.id%type; 
begin 

    begin 
     select id into v_id 
     from (select id 
       from a 
       where name = 'test' 
       order by id desc) 
     where rownum < 2 
      ; 
    exception when no_data_found then 
     v_id := null; 
    end; 

    dbms_output.put_line(v_id); 
    doSomething(v_id); 

end; 
/

由於@raukh指出的(雖然我在寫這個!)問題是print,這應該是dbms_output.put_line()

+0

感謝您的額外的耐用性,你是第一次,所以你會得到複選標記,我想:) – Th3sandm4n 2012-03-29 23:02:19

4

此:

Print v_id; 

無效也許你的意思是:

dbms_output.put_line(v_id); 

(請注意,您可能需要運行

set serveroutput on; 

事先爲了使上述有效果。)

+0

非常感謝你的是,我的心在別處:) – Th3sandm4n 2012-03-29 23:01:46

2

PRINT是不是一個有效的PL/SQL命令,所以這將創建一個問題。也許你想

DECLARE 
    v_id a.id%TYPE; 
BEGIN 
    SELECT id 
    into v_id 
    from (SELECT id 
      FROM a 
      where a.name='test' 
      order by id desc) 
    where rownum < 2; 
    dbms_output.put_line(v_id); 
    doSomething(v_id); 
END; 
/
+0

謝謝你,我的頭我想其他地方。我本來可以宣誓的印刷工作更早。 – Th3sandm4n 2012-03-29 23:03:07

相關問題