使用SQL开发人员

时间:2016-06-28 18:22:08

标签: sql oracle plsql oracle-sqldeveloper

大家好我是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;

/

2 个答案:

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

编译 - 并运行 - 就好了。

大家都这么说,这不是最好的方法,虽然这似乎是一个学习练习?

查找PROMPTACCEPT关键字..您可以在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