在 PL/SQL 过程中获取用户的输入

Get input from user in PL/SQL procedure

我正在构建一个程序,需要从用户那里获得输入以打印一些细节。但是当我使用 & 获取值时,它会因错误而失败。逻辑如下..

  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 内部错误而失败。

是否有任何方法可以从用户那里获取输入以进一步执行该过程?

这在 PL/SQL 中是不可能的 - PL/SQL 无法访问终端(除非你在 运行 程序之前做一些事情 like plug in Java or call your program from a something like SQL*Plus(in which you can use commands like ACCEPT/PROMPT .

&变量是替代变量,特定于SQL*Plus,而不是PL/SQL

如果您正在使用某些 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;