2017-06-10 53 views
1

這是一個簡單的sql語句,用於根據輸入的選項打印2個不同的問題。我注意到,即使else或條件不成立,兩個語句都會運行。打印的輸出是正確的,但如果語句不正確,我不需要替換變量來提示用戶輸入。IF即使條件從未如此也執行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語句,那麼你已經做了一些事情來讓電腦認爲它是真的。你需要弄清楚什麼步驟會無意中將'TRUE'結果返回給你的IF語句。 – SandPiper

回答

6

&Please_Enter_Choice替換變量替換預處理步驟是需要p!ACE(客戶端)的實際代碼(在服務器上)運行之前。請記住,對這些變量的支持是前端工具的一個特性(例如sql * plus),而數據庫甚至不知道它們曾經存在過。結論:你不能像這樣製作交互式的PL/SQL腳本。