2012-03-29 11 views
3

特定の列の値a.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" を期待するとき次のいずれか:

= =。 "%s、列%s:\ n%s" への "V_ID"の代わりにシンボル ":="が使用されました 06550. 00000 - "行%s、列%s:\ n%s" *原因:通常はPL/SQLコンパイルエラー。 は処置:この

答えて

10

を望んでいました。あなたが正しい価値を得ることを保証する他の方法はありません。

クエリに一致するidがない可能性もあります。私はこれに対処するために追加のbegin... end;ブロックを追加しました。 @raukhとして

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; 
/

(私はこれを書いていたしながら!)注意問題がdbms_output.put_line()

+0

余分な堅牢性をありがとう、私は仮定してチェックマークを取得する最初だった:) – Th3sandm4n

4

:。

Print v_id; 

が有効でないおそらくあなたは意味:

dbms_output.put_line(v_id); 

(あなたが

を実行する必要があることに注意してください?効果を持っている上記のためには、事前に
set serveroutput on; 

。)それが問題を作成するために起こっているよう

+0

そのためにありがとうございました、私の心は別の場所にある:) – Th3sandm4n

2

PRINTは、有効なPL/SQLコマンドではありません。おそらく、あなたはrownumorder byを使用する場合は、サブクエリ内での順序を置くためにを持っている

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

おかげであるべき、printで、私の頭があります私が推測するところの他の場所。私は、印刷物が早くに働いていることを誓ったことができた – Th3sandm4n

関連する問題