-4

1.このコードは正確に何をしますか?
2.数字(2)とは?

cursor c1 is    
select employee_id, department_id, commission_pct  from hr.employees; 
emprec c1%rowtype; 
v_hike  number(2);
begin 
open c1; 
loop 
   fetch c1 into emprec; 
   exit when c1%notfound;
   if  emprec.department_id = 40 then   v_hike := 10; 
   elsif emprec.department_id = 70 then   v_hike := 15;     
   elsif emprec.commission_pct > 0.30 then   v_hike := 5;
   else   v_hike := 10; 
end if; 


update employees set salary = salary + salary * v_hike/100  
where employee_id = emprec.employee_id; 
end loop; 
end;
4

2 に答える 2

0

このコードは正確に何をしますか?

まず第一に、Oracle PL/SQL では、PL/SQL 無名ブロックで DECLARE キーワードが抜けているため、構文的に正しくありません。コンパイル エラーが発生します。

順を追って説明しましょう:

cursor c1 is    
select employee_id, department_id, commission_pct  from hr.employees; 
emprec c1%rowtype; 

明示カーソルであり、選択クエリの処理情報を格納するワークエリアです。emprec は、FETCH ステートメントを発行したときに結果セットを保持するコレクション型です。

v_ハイキング番号 (2);

これは、NUMBER データ型で宣言された変数です。NUMBER(2) は、PRECISION 2 の数値を保持できることを意味します。

begin 
open c1; 
loop 
   fetch c1 into emprec; 
   exit when c1%notfound;
   if  emprec.department_id = 40 then   v_hike := 10; 
   elsif emprec.department_id = 70 then   v_hike := 15;     
   elsif emprec.commission_pct > 0.30 then   v_hike := 5;
   else   v_hike := 10; 
end if; 


update employees set salary = salary + salary * v_hike/100  
where employee_id = emprec.employee_id; 
end loop; 
end;

次のステップは、

  • を。カーソルを開く

    b. カーソル内の行ごとに、ループして emprec でコレクションを準備します。

    c. カーソルからフェッチするレコードがない場合、終了します

    d. IF-ELSE 構造に基づいて v_hike 変数に数値を割り当てます。

    e. UPDATE ステートメントを実行します。

    f. ループから抜け出します。

    g. ブロックのスコープは END キーワードで終了します。

于 2014-09-08T11:34:39.410 に答える