dbms_output.put_line 即使在 'set serveroutput on' 之后也不打印内部程序
dbms_output.put_line not printing inside procedure even after 'set serveroutput on'
下面的过程执行得很好,但是它里面的 'dbms' 没有打印任何输出。(这个过程旨在记下尚未在 table 中输入工资的员工的姓名)
table 有两列,即 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;
/
服务器输出设置为 'on' 并且我在执行时收到消息 "procedure completed successfully" 但它不打印未输入工资的 emps 的名称(其中有几个在table)。
这里有什么症结吗?
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
关键字)。您可以将它们放在那里,但它们会被忽略。
下面的过程执行得很好,但是它里面的 'dbms' 没有打印任何输出。(这个过程旨在记下尚未在 table 中输入工资的员工的姓名) table 有两列,即 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;
/
服务器输出设置为 'on' 并且我在执行时收到消息 "procedure completed successfully" 但它不打印未输入工资的 emps 的名称(其中有几个在table)。 这里有什么症结吗?
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
关键字)。您可以将它们放在那里,但它们会被忽略。