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

时间:2015-02-23 06:43:38

标签: oracle plsql

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

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

是否有任何方法可以从用户那里获得输入以继续进行该过程?

2 个答案:

答案 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;