使用相同的变量在PL / SQL块中从用户获取5个不同的输入

时间:2015-03-28 08:27:27

标签: oracle plsql

declare 
x number;
begin
for i in 1 .. 5
loop
x:=&no;
dbms_output.put_line(x);
end loop;
end; 

这里我想要做的是在pl sql块中从用户那里获取五次输入并打印它,但是它只打印一个在编译时获取的值,是否有任何解决方案呢?

Enter value for no: 1
old   7: x:=&no;
new   7: x:=1;
1
1
1
1
1

3 个答案:

答案 0 :(得分:1)

PL / SQL对于在数据库中进行操作非常有用。我不知道在PL / SQL中读取用户输入的方法,也不能编写GUI。 SQL * plus(“shell”)可以从用户那里获取输入,但是你不能轻易地编写循环。

您无法在PL / SQL和SQL * plus中编写完整的应用程序。您需要一些其他主机语言才能执行此操作。这就是为什么我们有java jdbc,perl DBI和许多其他编程语言绑定。

答案 1 :(得分:1)

变量&no在此处充当替换变量,这意味着您必须为其替换值。一旦完成,就不需要接受任何进一步的用户输入;已经取代了。

如果您想接受用户输入,请使用ACCEPT command

SQL> accept x number format '9999' prompt 'Enter number: '
Enter number: 2

但是,这不适用于PL / SQL块,因为它不是PL / SQL。所以,你是一个正确的混乱,这样做5次:

SQL> accept x number format '9999' prompt 'Enter number: '
Enter number: 8
SQL> exec dbms_output.put_line(&x);
8

PL/SQL procedure successfully completed.

SQL>

除非您特别需要在SQL * Plus中格式化命令行报告,否则您将使用错误的环境来执行此操作。

答案 2 :(得分:0)

简短回答:你不能。
PL / SQL在数据库内执行,数据库无法访问终端窗口。

你唯一能做的就是:

DECLARE 
        a NUMBER;
        b NUMBER;
        c NUMBER;
        d NUMBER;
        e NUMBER;
BEGIN
        a := &NO;
        b := &NO;
        c := &NO;
        d := &NO;
        e := &NO;

        DBMS_OUTPUT.PUT_LINE(a);
        DBMS_OUTPUT.PUT_LINE(b);
        DBMS_OUTPUT.PUT_LINE(c);
        DBMS_OUTPUT.PUT_LINE(d);
        DBMS_OUTPUT.PUT_LINE(e);
END;
/

这里的缺点是它总是要求用户输入5个值。
不是更多,而不是更少。