我正在构建一个程序,需要从用户那里获取输入以打印一些细节。但是当我使用&获取值失败并出现错误。逻辑如下..
DBMS_OUTPUT.PUT_LINE('Enter Y to display Unauthorized records OR N to skip the display');
--SELECT &1 INTO lv_choice FROM DUAL;
IF NOT ('&lv_choice'='Y') THEN
DBMS_OUTPUT.PUT_LINE ('RECORDS WILL NOT BE DISPLAYED');
ELSE
DBMS_OUTPUT.PUT_LINE ('RECORDS TO BE DISPLAYED ARE:');
......
我已经尝试将& 1用于双重或直接调用& lv_choice,但是PLSQL内部错误失败。
是否有任何方法可以从用户那里获得输入以继续进行该过程?
答案 0 :(得分:1)
这在PL / SQL中是不可能的 - PL / SQL无法访问终端(除非您执行like plug in Java某项操作或从something like SQL*Plus(in which you can use commands like ACCEPT/PROMPT调用您的程序你运行程序)。
&
变量是替换变量,并且特定于SQL * Plus,而不是PL / SQL
答案 1 :(得分:0)
如果您正在使用某些UI终端,如SQLDeveloper或TOAD,您可以使用以下代码实现它:
CREATE OR REPLACE INPUTPROCEDURE (LV_CHOICE IN VARCHAR2)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Enter Y to display Unauthorized records OR N to skip the display');
--SELECT &1 INTO lv_choice FROM DUAL;
IF lv_choice <> 'Y' THEN
DBMS_OUTPUT.PUT_LINE ('RECORDS WILL NOT BE DISPLAYED');
ELSE
DBMS_OUTPUT.PUT_LINE ('RECORDS TO BE DISPLAYED ARE:');
END INPUTPROCEDURE;
并调用上述过程,如下所示:
DECLARE
dyn_stmt VARCHAR2(200);
b BOOLEAN := TRUE;
BEGIN
dyn_stmt := 'BEGIN INPUTPROCEDURE(:LV_CHOICE); END;';
EXECUTE IMMEDIATE dyn_stmt USING b;
END;