【发布时间】:2020-12-05 05:49:22
【问题描述】:
多次遇到这个问题,SQL Developer 无法显示 DBMS_OUTPUT.PUT_LINE 尽管已经打开了服务器输出并且从视图工具栏打开了 Dbms 输出
set serveroutput on;
accept p_angka prompt 'Input Number : ';
declare
a integer;
b integer :=&p_angka;
begin
dbms_output.put_line('---ODD NUMBER---');
for a in 1..b loop
if (a mod 2) then
dbms_output.put_line(a);
end if;
end loop;
end;
控制台成功请求输入,但无法在任何地方显示所需的输出
ORA-06550: line 8, column 12:
PLS-00382: expression is of wrong type
ORA-06550: line 8, column 9: error
【问题讨论】:
-
在 Oracle 中,
mod是一个函数,而不是一个运算符。mod(a, 2)而不是a mod 2- 正如大力水手已经在他的回答中解释的那样。此外,这不是 C - 您不能使用算术表达式并期望它被隐式转换为布尔值。您必须明确地将您的“mod”与 0 或 1 进行比较,正如 Popeye 所展示的那样。 -
a mod 2在 PL/SQL 以及 SQL 中的常规mod()函数中有效。 -
您没有看到 dbms_output 的原因是 PL/SQL 是一种编译语言,并且由于第 8 行的语法错误(
if条件)它无效并且永远不会启动。即使是这样,dbms_output 调用也在错误行之后。 -
顺便说一句,C 类型语言使用括号来表示
if条件,例如if (a > b) do_something。 PL/SQL 的if条件改为由then关键字终止,例如if a > b then do_something.