使用 SQL 开发人员在 PL/SQL 中输出用户输入
Output user input in PL/SQL using SQL developer
大家好,我是 PL/SQL 的新手,但是我正在编写一个小代码,提示用户输入 2 个数字并使用 DBMS_output.Put_line 显示数字。
但是我得到一个编译错误,下面是我的代码,我正在使用 "Oracle SQL developer"
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
n_no_1 number(8,2);
n_no_2 number(8,2);
BEGIN
DBMS_output.put_line('Enter Value for no 1');
&n_no_1;
DBMS_output.put_line('Enter value for no 2');
&n_no_2;
DBMS_OUTPUT.PUT_LINE('The value of No 1 is' || n_no_1 );
DBMS_OUTPUT.PUT_LINE('The value of No 2 is' || n_no_2 );
END;
/
&variable
语法不是 PL/SQL:它是 SQL Developer 的一部分。我看到你正在尝试做什么和语法错误,但没有必要更正它们,因为它最终不会起作用。
原因是:您无法在运行时通过 PL/SQL 接受用户输入。
这两行是你的问题,但是,不是因为其他答案中提到的原因:
&n_no_1;
&n_no_2;
在 SQL 中,您可以使用与号 (&) 来触发名为 "Macro substitution" 的东西。
当编译器遇到这样的事情时(即&n_no1
),它会提示用户输入一个值来代替它。
所以如果你输入"Hello"。您的代码变为:
DBMS_output.put_line('Enter Value for no 1');
Hello;
如您所见,如果您刚刚输入,那将失败。
您要做的是将该值赋给一个变量,如下所示:
n_no_1 := '&n_no_1';
这样得到"replaced":
n_no_1 := 'Hello';
编译和运行都很好。
综上所述,这不是最好的方法,尽管这似乎是一种学习练习?
查找 PROMPT
和 ACCEPT
关键字..您可以使用 SQL 中的关键字(在 BEGIN / DECLARE / END 块之外)首先以更简洁的方式捕获值时尚:)
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve032.htm#SQPUG052
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve005.htm#SQPUG026
在这里发现了一个额外的 link 值得一读。解释的内容比您所看到的要多得多,但它讨论了替换变量和其他类似的东西(以及其他一些不相关的东西:))
https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia
大家好,我是 PL/SQL 的新手,但是我正在编写一个小代码,提示用户输入 2 个数字并使用 DBMS_output.Put_line 显示数字。 但是我得到一个编译错误,下面是我的代码,我正在使用 "Oracle SQL developer"
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
n_no_1 number(8,2);
n_no_2 number(8,2);
BEGIN
DBMS_output.put_line('Enter Value for no 1');
&n_no_1;
DBMS_output.put_line('Enter value for no 2');
&n_no_2;
DBMS_OUTPUT.PUT_LINE('The value of No 1 is' || n_no_1 );
DBMS_OUTPUT.PUT_LINE('The value of No 2 is' || n_no_2 );
END;
/
&variable
语法不是 PL/SQL:它是 SQL Developer 的一部分。我看到你正在尝试做什么和语法错误,但没有必要更正它们,因为它最终不会起作用。
原因是:您无法在运行时通过 PL/SQL 接受用户输入。
这两行是你的问题,但是,不是因为其他答案中提到的原因:
&n_no_1;
&n_no_2;
在 SQL 中,您可以使用与号 (&) 来触发名为 "Macro substitution" 的东西。
当编译器遇到这样的事情时(即&n_no1
),它会提示用户输入一个值来代替它。
所以如果你输入"Hello"。您的代码变为:
DBMS_output.put_line('Enter Value for no 1');
Hello;
如您所见,如果您刚刚输入,那将失败。
您要做的是将该值赋给一个变量,如下所示:
n_no_1 := '&n_no_1';
这样得到"replaced":
n_no_1 := 'Hello';
编译和运行都很好。
综上所述,这不是最好的方法,尽管这似乎是一种学习练习?
查找 PROMPT
和 ACCEPT
关键字..您可以使用 SQL 中的关键字(在 BEGIN / DECLARE / END 块之外)首先以更简洁的方式捕获值时尚:)
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve032.htm#SQPUG052
http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve005.htm#SQPUG026
在这里发现了一个额外的 link 值得一读。解释的内容比您所看到的要多得多,但它讨论了替换变量和其他类似的东西(以及其他一些不相关的东西:))
https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia