0

hrスキーマに というテーブルが 1 つありますemployee。このテーブルに行レベルのトリガーを作成して、employee テーブルの給与を更新しようとするたびに給与が減らないようにする必要があります。

これを試しましたが、エラーが発生します:

エラー レポート: ORA-01748: ここでは単純な列名のみが許可されています 01748. 00000 - "ここでは単純な列名のみが許可されています

CREATE or REPLACE TRIGGER salary_dec_trigger 
BEFORE UPDATE OF emp.salary
ON emp 
FOR EACH ROW 
BEGIN 
if(:new.salary>:old.salary)
then

update emp set emp.salary=emp.salary+:new.salary where emp.employee_id=:new.employee_id;
else 
rollback;
end if;
END; 
/ 
4

2 に答える 2

1
CREATE or REPLACE TRIGGER salary_dec_trigger 
BEFORE UPDATE OF salary ON emp 
FOR EACH ROW 
BEGIN 
  if(:new.salary < :old.salary) then
    raise_application_error(-20001, 'Salary can''t be decreased');
  end if;
END; 
于 2013-02-06T07:39:16.170 に答える
0

あなたのコードからわかる限り、従業員の給与を更新するたびに、実際には以前の給与と合計することを試みていますよね? そして、給与の増加のみを許可し、決して減少を許可しません。

では、なぜあなたは言ってみません:new.salary = :old.salary + :new.salaryか?そして、ロールバックをスキップして、ただ実行してください:new.salary = :old.salary

それが機能しない場合は、自律型トランザクションを使用して手順を試す必要がありますが、これは before トリガーを使用して直接実行できるようにする必要があります (こちらを確認してください)。

于 2013-02-06T07:48:48.570 に答える