Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để nâng cao một Ngoại lệ bên trong một Trigger? Có cách nào để làm việc này không?

Bạn đã gần tới; bạn cần một khối DECLARE trong trình kích hoạt nếu bạn muốn khai báo bất cứ điều gì; điều này có nghĩa là mệnh đề WHEN của bạn không đúng chỗ.

create or replace trigger trig1
 before update
 of sal
 on emp
 for each row
 when (new.sal < old.sal)

declare    
   user_xcep EXCEPTION;
   PRAGMA EXCEPTION_INIT( user_xcep, -20001 );
begin
   raise user_xcep;
end;

SQL Fiddle

Một vài điểm:

  1. Không bao giờ bắt một ngoại lệ và sau đó gọi DBMS_OUTPUT.PUT_LINE; nó là vô nghĩa. Một người nào đó phải ở đó để xem kết quả cho mỗi và mọi bản ghi. Nếu bạn không muốn điều gì đó xảy ra, hãy nâng cao ngoại lệ và sau đó nắm bắt nó. Tôi đã thêm mã lỗi vào ngoại lệ của bạn để bạn có thể bắt mã này bên ngoài trình kích hoạt và xử lý nó theo cách bạn muốn (không in bất kỳ thứ gì ra stdout).
  2. Đó là một điểm nhỏ nhưng tôi đã thêm một chút khoảng trắng; không nhiều. Ban đầu, tôi không thể biết vấn đề với mã của bạn là do đâu vì bạn không có bất kỳ mã nào.
  3. Bạn đã thiếu dấu chấm phẩy sau khai báo ngoại lệ và RAISE.

Đọc thêm về các trường hợp ngoại lệ được xác định nội bộ trong tài liệu




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GWFG trong Oracle RAC

  2. Hibernate, id, oracle, chuỗi

  3. EBS 12.2.5 trở lên:Sai lệch nút trang đăng nhập

  4. SQL Tham gia trên các giá trị null

  5. Cách giải quyết ORA-00900