更新値が従業員の給与の範囲外にある場合、トリガーは機能します。ここでトリガー実行中のエラー-ORA-04088?
は私のトリガコードです:
BEGIN
UPDATE cux_jobs_12483
SET min_salary = 500, max_salary = 10000
WHERE job_id = 'SA_MAN';
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE || SQLERRM);
END;
エラーコードです:
-20901ORA-20901: Salary out of range!
ORA-06512: at "CHECK_SAL_RANGE_12483", line 12
ORA-04088: error during execution of trigger 'CHECK_SAL_RANGE_12483'
私はRAISE_APPLICATION_ERRORを追加しない場合
CREATE OR REPLACE TRIGGER check_sal_range_12483
BEFORE UPDATE OF min_salary, max_salary ON cux_jobs_12483
FOR EACH ROW
DECLARE
v_num NUMBER;
BEGIN
SELECT e.employee_id
INTO v_num
FROM cux_employees_12483 e
WHERE e.job_id = 'SA_MAN'
AND e.salary NOT BETWEEN :NEW.min_salary AND :NEW.max_salary;
IF SQL%ROWCOUNT >= 1 THEN
raise_application_error(-20901, 'Salary out of range!');
END IF;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line(SQLCODE || SQLERRM);
WHEN too_many_rows THEN
dbms_output.put_line(SQLCODE || SQLERRM);
WHEN OTHERS THEN
dbms_output.put_line(SQLCODE || SQLERRM);
raise_application_error(-20901, 'Salary out of range!');
END;
そして、ここでは、コールがありますトリガのEXCEPTION、更新は成功し、動作しません。
を私は給料の従業員は、新しい範囲の外にあるそこに持っている場合、トリガーは、更新を中断します。 – user6148078
それはまさにそうです。無効な入力がある場合は例外を発生させたい – Rene
'ORA-04088'は、' ORA-06512'の結果であり、これは未処理のカスタム 'ORA-20901'エラーの結果です。 –