大家好我是PL / SQL的新手,但我正在编写一个小代码,提示用户输入2个数字并使用DBMS_output.Put_line显示数字。 但是我收到了编译错误,下面是我的代码,我正在使用" Oracle SQL开发人员"
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;
/
答案 0 :(得分:0)
&variable
语法不是PL / SQL:它是SQL Developer的一部分。我看到你要做的事情和语法错误,但是纠正它们没有意义,因为它最终无法发挥作用。
原因是:您无法在运行时通过PL / SQL接受用户输入。
答案 1 :(得分:0)
这两行是你的问题,但不是出于其他答案中提到的原因:
&n_no_1;
&n_no_2;
在SQL中,您可以使用&符号(&)来触发名为"宏替换"。
当编译器出现类似这样的内容时(即&n_no1
),它会提示用户输入一个值以替换它的位置。
所以,如果你输入" Hello"。您的代码变为:
DBMS_output.put_line('Enter Value for no 1');
Hello;
正如你所看到的那样,如果你输入了那个就会失败。
您要做的是将该值分配给变量,如下所示:
n_no_1 := '&n_no_1';
得到"取代"通过这个:
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
在这里找到一个额外的链接值得一读。解释了比你正在看的更多,但它讨论了替换变量,以及其他类似的东西(以及其他一些不相关的东西:))
https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia