2017-11-09 1 views
0

にcase文で変数に選択します。例外内でgoto end_loop参照を使用したので、ループを続行できます。 例外を入れる前に、ORA-01403エラーが発生しました。 ORA-01422エラーが発生しました。 case文を使わずに他のものを選択してもうまくいきました。<em>FOO</em>変数は<em></em>ためのループ内<em>選択した場合</em>で満たされ、その後、出すべきであるforループ

declare 
foo varchar2(2000); 
BEGIN 
    FOR rec IN (SELECT something FROM somewhere) 
    LOOP 
     BEGIN 
      Select case when attribute = 'something' then '1' end into foo from somewhere where some_condition; 
      DBMS_OUTPUT.put_line('Something' || foo);  
      EXCEPTION 
      WHEN NO_DATA_FOUND THEN 
       foo := NULL; 
       goto end_loop;  
     END; 
     <<end_loop>> 
     null; 
    END LOOP; 
END; 

編集

より詳細な

declare 
opdatum varchar2(2000); 
opdiagnose varchar2(2000); 
d_op varchar2(2000); 
some_variable varchar2(2000); 
BEGIN 
    FOR rec IN (SELECT p.name, p.vorname, p.geburtsdatum, a.kis_id, kg.kg_id FROM kg_eintraege kg 
    INNER JOIN aufenthalte a 
    ON kg.patient_nr = a.patient_nr 
    and kg.fall_nr = a.fall_nr 
    INNER JOIN personen p 
    ON a.patient_nr = p.pat_nr 
    WHERE kg.kgtitel_nr = xxxxxxa 
    and a.kis_id = xxxxxxb) 
    LOOP 
     BEGIN 
      Select kurztext into opdatum from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxc; 
      Select text into opdiagnose from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxd; 
      Select text into d_op from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxe; 
      Select case when kurztext = 'Something' then '1' end into some_variable from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxf; 
      DBMS_OUTPUT.put_line(rec.name || ' ' || rec.vorname || ' ' || TO_CHAR(rec.geburtsdatum, 'DD.MM.YYYY') 
      || ' ' || rec.kis_id || ' ' || opdatum|| ' ' || opdiagnose || 
      ' ' || d_op || ' ' || some_variable 
     );  
      EXCEPTION 
      WHEN NO_DATA_FOUND THEN 
       some_variable := NULL; 
       goto end_loop;  
     END; 
     <<end_loop>> 
     null; 
    END LOOP; 
END; 

更新

case文は大丈夫のようです。問題は、selectの一部の行がnullであることです。

アップデート2

必要はありません例外。

ソリューション:助けをNikNikへ

select nvl((select case when kurztext = 'Something' then '1' end from kg_eintraege where kontext = rec.kg_id and kgtitel_nr = xxxxxxf and kurztext = 'Something'), 'NOT_FOUND') into some_variable from dual 

感謝。

+0

何 'RECのは約(ケースを選択すると、どこかどこsome_condition FROM FOO AS、属性= '何か' '1' 末端)LOOP'? –

+1

ループタグ<>がループ内にあります。とにかく終わる場所にジャンプします。あなたのテーブルにデータとして表示することができます –

+0

@Wernfried、私はそれを行うことはできません。 –

答えて

0

問題はCASEではありませんが、あなたのWHERE条件魔法使いは1レコード以上、または0レコードが見つかりました。

詳細については、hereをご覧ください。あなたがthisを行うことができます第2のケースで

select nvl( (your_case), 'NOT_FOUND' ) into foo from dual; 
+0

どうですか?ループの外側で動作します。そしてループ内の他の選択は、異なる値を持つ条件が同じである。 –

+0

whereの異なる値は、結果を変更する可能性があります。ケースの中にケースを入れてみてください(おそらくサイクルの最初の1インチ) – NikNik

+0

ORA-01403エラーが再び表示されます。あなたの提案は何ですか? –

関連する問題

 関連する問題