【问题标题】:Output user input in PL/SQL using SQL developer使用 SQL developer 在 PL/SQL 中输出用户输入
【发布时间】: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;

/

【问题讨论】:

    标签: sql oracle plsql oracle-sqldeveloper


    【解决方案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 处理器本身,如果可以直接访问,将不知道如何处理&
    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2018-07-08
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多