は、「このクエリが結果を返す場合 『さらなる行動を取る』それから私は、他のステップを実装するために持っている場合は、さらに場合/ else文。」私たちは巣ができ
文IF。あなたはさらに文が何であるかを言うことはありませんが、コードは次のようになります。これはあなたがまた、CASE文として、それを構造化する可能性が必要なものである場合
...
IF v_cnt_1 >0 or v_cnt_2 >0
THEN DBMS_OUTPUT.PUT_LINE('all set');
ELSE
-- take further action
if whatever = 0 then
DBMS_OUTPUT.PUT_LINE('do something #1');
elsif whatever > 0 and yeahyeah = 0 then
DBMS_OUTPUT.PUT_LINE('do something #2');
elsif whatever > 0 and yeahyeah > 0 then
DBMS_OUTPUT.PUT_LINE('do something #3');
end if;
end if;
:
case
when v_cnt_1 >0 or v_cnt_2 >0 then
DBMS_OUTPUT.PUT_LINE('all set');
when whatever = 0 then
DBMS_OUTPUT.PUT_LINE('do something #1');
when whatever > 0 and yeahyeah = 0 then
DBMS_OUTPUT.PUT_LINE('do something #2');
when whatever > 0 and yeahyeah > 0 then
DBMS_OUTPUT.PUT_LINE('do something #3');
else
DBMS_OUTPUT.PUT_LINE('Unexpected state');
end case;
に留意されたいです。 CASEとID/ELSIFの評価が短絡します。これは最初にプログラムが最初の一致条件を実行することを意味するので、一般的な条件の前に特定のケースを持つ必要があります。これはよくない:
case
when whatever = 0 and yeahyeah > 0 then
dbms_output.put_line('do something');
when whatever = 0 and yeahyeah = 1 then
dbms_output.put_line('will never execute');
場合
わからない「私は新しいプロシージャ内でこのプロシージャを別のプロシージャを作成して呼び出す必要がありません」何ではなく実行されるステップであるかのご質問・ドライブ複雑な(2行以上のコード)プログラム全体を読むほうが簡単であるため、手続きを呼び出すのがよりクリーンです(ローカルにすることもできます)。
declare
v_cnt_1 number;
v_cnt_2 number;
...
procedure proc1(p1 number) is
...
end p1;
procedure proc2(p1 number) is
...
end p2;
begin
...
case
when v_cnt_1 >0 or v_cnt_2 >0 then
null -- 'all set';
when whatever = 0 then
proc1(v_cnt_1);
when whatever > 0 and yeahyeah = 0 then
proc1(v_cnt_2);
when whatever > 0 and yeahyeah > 0 then
proc1(v_cnt_1);
proc2(v_cnt_2);
else
proc3(42);
end case;
、全体のcase文を完全に理解し、どのアクションをトリガする条件を参照することは容易である。この方法は:スケルトンコードでは次のようになりますこと。もちろん、手続きに意味のある名前を付けることは、この理解に役立ちます(30文字のOracle命名制限では必ずしも容易ではありません)。
出典
2017-11-26 09:04:23
APC
IF(v_cnt_1> 0またはv_cnt_2> 0)とTake_further_actionを同じように使用する必要がある理由 THEN DBMS_OUTPUT.PUT_LINE( 'すべて設定'); – kkl
はいKKlのみTake_further_actionを使用して、別の条件に進むことができます。しかし論理的にも正しい –