以下程序执行正常,但其中的“dbms”不打印任何输出。(程序意味着记下表中尚未输入工资的emps的名称) 该表有两列,即1)name_of_emp 2)salary(默认为0)
create or replace procedure add_sal_info
as
cursor c is select * from emp_earnings;
cname varchar2(30);
csal number(5);
begin
open c;
while(c%found) loop
fetch c into cname, csal;
if (csal = 0) then
dbms_output.put_line('enter salary for : ' ||' '|| cname);
end if;
end loop;
close c;
end;
/
serveroutput设置为'on'并且我在执行时得到消息“procedure completed successfully”但它不打印未输入工资的emps的名称(表中有一些)。 这里有什么关键吗?
答案 0 :(得分:0)
c%found
不成立,因此您永远不会进入循环。这是代码结构问题,而不是dbms_output
问题。
顺便说一下,这可以简化为:
create or replace procedure add_sal_info
as
cursor c is select * from emp_earnings;
begin
for r in c loop
if r.csal = 0 then
dbms_output.put_line('enter salary for : ' ||' '|| r.cname);
end if;
end loop;
end;
甚至
create or replace procedure add_sal_info
as
begin
for r in (
select * from emp_earnings
)
loop
if r.csal = 0 then
dbms_output.put_line('enter salary for : ' ||' '|| r.cname);
end if;
end loop;
end;
PL / SQL在if
或while
条件下没有括号(而是使用then
关键字)。你可以把它们放在那里,但它们会被忽略。