我试图在我的BEGIN块中使用ACCEPT,但我一直在收到错误。如果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 CashAmount PROMPT 'Enter the amount of cash used for the expense: ';
DECLARE
CashTotal NUMBER(11,2);
BEGIN
SELECT SUM(Amt)
INTO CashTotal
FROM EXPDET
WHERE ExpNum = &ExpNum;
IF &CashAmount < (CashTotal - 0)
THEN
ACCEPT CType PROMPT 'Enter a credit card type: ';
ACCEPT CCNum PROMPT 'Enter a credot card number: ';
ACCEPT Amt Prompt 'Enter an amount: ';
END IF;
END;
/
答案 0 :(得分:3)
ACCEPT
是一个SQL * Plus命令。在将代码发送到数据库之前,客户端(SQL * Plus)会对其进行解释。 PL / SQL是一种仅在服务器上运行的语言。因此,你不能将这两者交织在一起。您不能在PL / SQL块中嵌入SQL * Plus命令。作为一般规则,PL / SQL块不能与用户交互。
如果你真的想要真正地了解杂草,可以在你的SQL * Plus脚本中构建一个相当复杂的分支逻辑,这样第二个只有三个ACCEPT
语句的脚本会当且仅当&CashAmount < (CashTotal - 0)
运行,但这很少是适当的方法。这可能涉及创建一个名为next_script
的新SQL * Plus变量,将该变量填充为块的一部分,然后在脚本中动态调用next_script
。但是,这不是建立稳固,可靠,易于维护的系统的方法。