为什么在我的PL?SQL脚本中忽略了我的IF?

时间:2014-04-22 01:08:04

标签: oracle if-statement plsql sqlplus

当我运行我的脚本时,我在输入N时询问“付款方式是现金(是/否)?”但它仍然执行IF下的陈述......为什么会发生这种情况?

ACCEPT ExpNum NUMBER PROMPT 'Enter an expense number:  ';

SELECT *
FROM ExpByCC
WHERE ExpNum = &ExpNum;

SELECT IsCash,CashAmt
FROM EXPMAST
WHERE ExpNum = &ExpNum
AND IsCash = 'Y';

ACCEPT CashChoice PROMPT 'Will the payment method be cash (Y/N)?  ';

DECLARE
    ChoiceCash VARCHAR2(1);
    NumRowInExpByCC NUMBER;
BEGIN
    ChoiceCash := &CashChoice;

    IF ChoiceCash = 'Y'
    THEN
            UPDATE EXPMAST
            SET IsCash =  ChoiceCash,
                CashAmt = &CashAmount
            WHERE ExpNum = &ExpNum;
            COMMIT;
    ELSE
            &CType;
            &CCnum;
            &Amt;

    END IF;

END;
/

1 个答案:

答案 0 :(得分:1)

当您在PL / SQL中使用SQL * Plus替换变量时,SQL * Plus仅仅充当预处理器。它必须在将PL / SQL块发送到要执行的数据库之前为所有变量提供替换值。这意味着,即使您在ELSE块中引用了未达到的替换变量,SQL * Plus仍需要确定要替换的值。 SQL * Plus无法执行PL / SQL代码,数据库也无法提示输入。

实际上,如果您需要提示人工输入,并且您希望这些提示由某种逻辑驱动,那么SQL * Plus通常不是您正在寻找的工具。有许多语言(shell脚本/批处理文件等),它们具有提示用户输入,执行简单条件逻辑,然后调用SQL * Plus(或使用内置API)与数据库交互的功能。