如何在plsql中传递运行时变量

时间:2012-07-18 12:06:49

标签: plsql oracle-apex

set serverout on
declare
first_num number(8):=#
second_num number(8):=&num1;
result number(8);
begin
result:=(first_num/second_num+second_num);
dbms_output.put_line('the resultant value is:'||result);
end;

我想在运行时传递变量,而我在oracle apex 4.1中运行此程序时出现以下错误消息

ORA-06550: line 2, column 22:
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
pile

3 个答案:

答案 0 :(得分:0)

&替换是sqlplus客户端的一个功能,而不是PL / SQL本身。所以你的问题是特定于你正在使用的这个“Oracle Apex”客户端(从未听说过对不起)。我的理解是其他一些GUI客户端也支持&替换。我自己只使用sqlplus。

&num无效PL / SQL。但默认情况下,在将代码传递给服务器进行解析/执行之前,sqlplus会将其替换为相应的值。如果您实际上正在开发程序,那么您需要查看语言/框架的绑定变量。对不起,我没有适合您的解决方案,希望这有帮助。

答案 1 :(得分:0)

如果您正在讨论从APEX内部启动sqlplus会话到后端服务器以执行,那么您的脚本看起来很好。但在这种情况下,我会将您的变量更改为& 1和& 2而不是& num和& num1,并尝试一下。

但是如果你试图直接在APEX中执行这段代码,那么Sodved是正确的,你需要首先将你的变量标记为:num和:num1然后调用模块必须将变量绑定到它才能执行它。

希望这会有所帮助。

答案 2 :(得分:0)

而不是写

first_num number(8):=#
second_num number(8):=&num1;

first_num number(8):=:num;
second_num number(8):=:num1;

它在顶点工作。