2

みんな私は次の問題を抱えています:

上司の給与の50%未満の従業員の給与を15%増やします。カーソル、ループ、および更新を使用してPL/SQLプロシージャを記述します。

プロシージャヘッダープロシージャの作成または置換inc_salaryは次のとおりです。

。昇給後の給与が上司の給与の50%を超える場合は例外です。

実際には、次のように直接行うことができます。

update emp e
set e.salary+=e.salary*0.15
where e.salary<(select e.mgr from emp e, group by e.mgr)

これがこのテーブルの写真です: ここに画像の説明を入力してください

しかし、手順の使い方がわかりません。このように宣言した場合、プロシージャを作成または置換inc_salaryします。その場合、そのパラメータはどうなりますか?もちろんループを使うことができます

declare
for r in (select * from emp e) loop
update  emp e
set r.salary+=r.salary*0.15;
where r.salary<r.mgr
exception
if r.salary >r.mgr*1.15  then
dbms.output_putline(' it can't increase');
end loop;
end;

しかし、それをどのように組み合わせるのですか?

4

2 に答える 2

1

なぜPL/SQLプロシージャが必要なのですか?簡単なクエリでこの作業を実行できます。

UPDATE emp
SET salary = salary * 1.15
WHERE empno IN (
    SELECT e.empno
      FROM emp e
      JOIN emp m ON e.mgr = m.empno
     WHERE e.salary < m.salary * 0.5
)

それでおしまい!

ただし、手順を使用する必要がある場合は、それをどのように処理するかを自分で決定する必要があります。

すべてのプロシージャには正式なパラメータのセットがあり、空のセットにすることもできます。プロシージャに何を渡すかを決定するのはあなたです。これらの状況については、マネージャーまたはアーキテクトに相談してください。

于 2013-02-06T06:31:58.043 に答える
0
declare
prec number;
 procedure inc_salary(prcin number) 
is
cursor cl is * from employees;
msal number(8,2);
mid number(6);
begin
for r in cl loop
  mid := nvl(r.manager_id, r.employee_id);
  select salary into msal from employees where employee_id = mid;
  if r.salary < (msal * 0.5) then
     update employees set
     salary = salary * prc
     where employee_id = r.employee_id;
     end if;
   end loop;
end inc_salary;
 begin 
 prec := 1.5;
inc_salary(prec);
end ;
于 2017-03-11T23:34:38.673 に答える