问题描述
嘿!
我是初学者。我正在观看Oracle PL/SQL上的YouTube教程,我遇到了此功能,该功能使用占位符通过在运行时从用户那里读取变量来将值分配给变量。
我尽力使用给定的格式 (我的查询已提供Oracle Live会话的链接)。但是,我总是遇到无法识别 “&” 符号的错误,并建议我其他各种符号should改为使用。
我在这个门户网站上发现了一个类似的问题 '动态变量初始化',它说。那里的用户面临同样的问题。给出的解决方案使用:
SET DEFINE ON
我已经相应地修改了代码,但是错误没有得到解决。请帮帮我。
我的代码是在bold并且显示的错误显示在italics:
SET DEFINE ON
Unsupported Command
DECLARE
age VARCHAR2(2);
BEGIN
age:= &age;
dbms_output.put_line('Your age is:' || age);
END;
ORA-06550: line 4, column 9: PLS-00103: Encountered the symbol "&" when expecting one of the following: ( - + case mod new not null continue avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date pipe
我们如何读取用户的输入?
我是初学者。我正在观看Oracle PL/SQL上的YouTube教程,我遇到了此功能,该功能使用占位符通过在运行时从用户那里读取变量来将值分配给变量。
我尽力使用给定的格式 (我的查询已提供Oracle Live会话的链接)。但是,我总是遇到无法识别 “&” 符号的错误,并建议我其他各种符号should改为使用。
我在这个门户网站上发现了一个类似的问题 '动态变量初始化',它说。那里的用户面临同样的问题。给出的解决方案使用:
SET DEFINE ON
我已经相应地修改了代码,但是错误没有得到解决。请帮帮我。
我的代码是在bold并且显示的错误显示在italics:
SET DEFINE ON
Unsupported Command
DECLARE
age VARCHAR2(2);
BEGIN
age:= &age;
dbms_output.put_line('Your age is:' || age);
END;
ORA-06550: line 4, column 9: PLS-00103: Encountered the symbol "&" when expecting one of the following: ( - + case mod new not null
我们如何读取用户的输入?
专家解答
正如 “Unsupported Command” 所暗示的那样,“set define on” 在LiveSQL中不起作用。& 号表示替换变量。
要使用这些,您需要使用交互式环境链接SQLcl,SQL * Plus或SQL Developer。
例如,当我在SQLcl中运行它时,我得到:
它们被称为替换变量,因为客户端将 & 变量替换为您传递的值。然后将其发送到数据库。
LiveSQL没有来回执行此操作。
替换变量对于命令行脚本非常方便,您希望用户提供自己的一些值。
但是人们很少从命令行调用PL/SQL。绝大多数时间它是通过用其他语言 (C,Java,...) 编写的应用程序调用的。
在这些应用程序中,您不能使用替换变量。您需要使用绑定变量来代替。这些是占位符。所以用户输入永远不会成为执行语句的一部分。这些对于安全性和性能至关重要。
如果您想了解更多有关这些的信息,以下文章可以进行很好的比较:
https://community.oracle.com/docs/DOC-915518
https://oracle-base.com/articles/misc/literals-substitution-variables-and-bind-variables
PS-您的LiveSQL链接似乎无效...
要使用这些,您需要使用交互式环境链接SQLcl,SQL * Plus或SQL Developer。
例如,当我在SQLcl中运行它时,我得到:
SQL> SET DEFINE ON SQL> SQL> DECLARE 2 age VARCHAR2(2); 3 BEGIN 4 age:= &age; 5 dbms_output.put_line('Your age is:' || age); 6 END; 7 / Enter value for age: 21 old:DECLARE age VARCHAR2(2); BEGIN age:= &age; dbms_output.put_line('Your age is:' || age); END; new:DECLARE age VARCHAR2(2); BEGIN age:= 21; dbms_output.put_line('Your age is:' || age); END; Your age is:21复制
它们被称为替换变量,因为客户端将 & 变量替换为您传递的值。然后将其发送到数据库。
LiveSQL没有来回执行此操作。
替换变量对于命令行脚本非常方便,您希望用户提供自己的一些值。
但是人们很少从命令行调用PL/SQL。绝大多数时间它是通过用其他语言 (C,Java,...) 编写的应用程序调用的。
在这些应用程序中,您不能使用替换变量。您需要使用绑定变量来代替。这些是占位符。所以用户输入永远不会成为执行语句的一部分。这些对于安全性和性能至关重要。
如果您想了解更多有关这些的信息,以下文章可以进行很好的比较:
https://community.oracle.com/docs/DOC-915518
https://oracle-base.com/articles/misc/literals-substitution-variables-and-bind-variables
PS-您的LiveSQL链接似乎无效...
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。