2017-06-10 9 views
1

これは、入力された選択肢に基づいて2つの異なる質問を印刷するために使用される単純なSQL文です。 elseまたはif条件が真ではないにもかかわらず、両方のステートメントが実行されていることに気付きました。出力された出力は正しいですが、ステートメントが真でない場合、代入変数を入力する必要はありません。 &Please_Enter_Choiceよう条件が決して真ではない場合でもELSE条件が実行されます

SET SERVEROUTPUT ON; 

DECLARE 
    choice number(2) := '&Please_Enter_Choice'; 
    question varchar2(50); 
BEGIN 
    if choice = 1 then 
     question := '&Whats_your_name?'; 
    else 
     if choice = 2 then 
      question := '&How_old_are_you?'; 
     end if; 
    end if; 

    DBMS_OUTPUT.PUT_LINE(question); 
END; 
+7

sqlplusはコードブロックが実行される前にすべての置換変数を入力するようにしています – thatjeffsmith

+0

私はここでも辛抱強くしようとはしていませんが、IF文が実行されると、不注意にあなたのIFステートメントに 'TRUE'の結果を返すステップを見つけ出す必要があります。 – SandPiper

答えて

6

置換変数は、実際のコードは、(サーバー上で)実行される前に、P(クライアント上)!エースをとる前処理ステップで置き換えられます。これらの変数のサポートはフロントエンドツールの機能(例:sql * plus)ですが、データベースにはそれらが存在することさえ知られていないことにも注意してください。結論:このような対話型PL/SQLスクリプトを作成することはできません。

関連する問題