使用 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';

编译和运行都很好。

综上所述,这不是最好的方法,尽管这似乎是一种学习练习?

查找 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

在这里发现了一个额外的 link 值得一读。解释的内容比您所看到的要多得多,但它讨论了替换变量和其他类似的东西(以及其他一些不相关的东西:))

https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia