使用 SQL developer 在 PL/SQL 中输出用户输入

Posted

技术标签:

【中文标题】使用 SQL developer 在 PL/SQL 中输出用户输入【英文标题】:Output user input in PL/SQL using SQL developer 【发布时间】:2016-06-28 18:22:07 【问题描述】:

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

/

【问题讨论】:

【参考方案1】:

这两行是你的问题,但是,不是因为其他答案中提到的原因:

&n_no_1;

&n_no_2;

在 SQL 中,您可以使用与号 (&) 来触发称为“宏替换”的操作。

当编译器遇到这样的事情(即&n_no1)时,它会提示用户输入一个值以替换它。

所以如果你输入“你好”。你的代码变成:

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

【讨论】:

现在编译成功了,我稍微改了一下代码,还是没有输出?这是现在的代码SET SERVEROUTPUT ON SIZE 1000000; DECLARE n_number1 number(8,2):=&n_number1; n_number2 number(8,2):=&n_number2; BEGIN DBMS_OUTPUT.PUT_LINE(n_number1); DBMS_OUTPUT.PUT_LINE(n_number2); END; / 对不起同上,但从一开始就是错误的。 “宏替换”不是“在 SQL 中”。宏替换是 SQLPlus 和其他基于它的前端的特性,例如 SQL Developer。在 SQL Developer 将文本字符串(PL/SQL 程序)提交给解释器(“编译器”)进行处理之前进行替换。马修的答案是正确的,你的答案是错误的。 @ditto 这是我在开始之前所做的,现在正在工作n_number1 number(8,2):=&n_number1;【参考方案2】:

&variable 语法不是 PL/SQL:它是 SQL Developer 的一部分。我看到了你正在尝试做的事情和语法错误,但没有必要纠正它们,因为它最终不会起作用。

原因是:您不能在运行时通过 PL/SQL 接受用户输入。

【讨论】:

我同意你关于 & 语法不是 PL/SQL 的一部分,但在本教程中我可以看到它通过 sql developer 访问用户输入,你可以运行第一个代码并查看 @ 987654321@ "原因是:您不能通过 PL/SQL 接受用户输入。"抱歉,这并不完全正确。宏替换允许您“通过 PL/SQL 接受用户输入”就好了。它不漂亮,但它确实允许你。 他们正在使用他们的客户端(例如 SQL Developer)的& 语法来收集和设置值在编译时。在您的示例中,您似乎正在尝试收集用户输入在运行时。在匿名 PL/SQL 块中,编译时间和运行时间可能非常接近,但不同。 重点是替换是由客户端程序(SQLPlus 或 SQLDeveloper 等)文本流(过程或函数,已执行替换)之前处理的) 被发送到 PL/SQL 解释器。你的答案是 100% 正确的。 PL/SQL 处理器本身,如果可以直接访问,将不知道如何处理&

以上是关于使用 SQL developer 在 PL/SQL 中输出用户输入的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL developer 在 PL/SQL 中输出用户输入

PL/SQL 和 SQL Developer 的结果不同

PL/SQL Developer 替代方案 [关闭]

PL/SQL Developer工具的使用简介

PL/SQL developer 出现无效的SQL语句的解决

PL/SQL Developer使用技巧(部分)