2017-08-26 11 views
1

以下の手順はうまく実行されますが、その中の 'dbms'は出力を出力しません(手順は給与が未だテーブルに入力される) テーブルの2つの列は1、すなわちました)name_of_emp 2)給与(デフォルト0)dbms_output.put_lineは 'set serveroutput on'の後でもプロシージャ内には表示されません

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をを「オン」に設定されていると私のメッセージの「プロシージャが正常に完了しました」を取得給与が入力されていないempsの名前は表示されません(テーブルにはいくつかあります)。 ここにどんな要点?

答えて

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キーワードを持っています)。そこに置くことはできますが、無視されます。

+0

はい、それをしました!おかげで –

+0

喜んでそれが助けた。 (単純なバージョンを追加するために編集しました) –

+0

ありがとう、これは簡単です。 –

関連する問題