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
答案 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个值。
不是更多,而不是更少。