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

lỗi kích hoạt không hợp lệ

Được rồi, tôi sẽ đăng bài này như một câu trả lời vì nhận xét sẽ không cho phép nhiều văn bản này.

Nhìn thấy bảng của bạn một số điều vẫn chưa rõ ràng. chức năng của bạn ADD_PACIENTE_QUARTO triển khai SELECT câu lệnh nêu rõ vị từ Where PAC = CONT nhưng PAC không có trong PACIENTE đặc điểm kỹ thuật của nhưng đúng hơn là biến cục bộ nơi bạn lưu trữ kết quả của mình và CONT là thông số của bạn, không rõ bạn đã thử gì ở đó.

Bây giờ trình kích hoạt của bạn có một số sai sót trong logic và triển khai.

Trước hết, tên trình kích hoạt của bạn là PACIENTE_TRIGGER nhưng dòng INSERT OR UPDATE ON TIPO_QUARTO cho tôi biết nó nằm trên TIPO_QUARTO bảng, đây không phải là một vấn đề về mặt cú pháp nhưng về mặt logic có thể là một vấn đề nhức nhối đối với những người đang cố gắng tìm ra bảng nào mà trình kích hoạt thuộc về.

Tiếp theo, sử dụng INSERT OR UPDATE OF TIPO ON TIPO_QUARTO để theo dõi Phụ trang hoặc cập nhật các thay đổi chỉ trong cột TIPO trong tổng số TIPO_QUARTO bảng.

Bây giờ dòng này If :new.TIPO_QUARTO = 'UTI' then , giả sử trình kích hoạt này được đính kèm với TIPO_QUARTO bảng, bảng đó không có cột có tên TIPO_QUARTO thay đổi điều này thành :new.TIPO .

Tiếp theo, PAC thuộc loại VARCHAR vì vậy tôi không rõ bạn đang cố gắng làm gì trong PAC := PAC - :new.TIPO; và trong PAC := PAC + :new.TIPO; cả hai dòng sẽ ném ra invalid number ngoại lệ vì bạn không thể thêm hoặc trừ các chuỗi, có thể ý định của bạn là nối hoặc lấy một chuỗi phụ.

Và cuối cùng là cuộc gọi đến UPDATE TIPO_QUARTO SET TIPO = PAC bên trong trình kích hoạt cho TIPO_QUARTO sẽ dẫn đến mutating table ngoại lệ, bạn không thể truy vấn / cập nhật bảng nằm giữa câu lệnh DML (INSERT hoặc UPDATE trong trường hợp này) để khắc phục điều này, bạn chỉ có thể gán :new.TIPO := PAC .

Hãy quan tâm đến chi tiết này và có thể vấn đề của bạn sẽ không còn nữa.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy n hàng đã mở khóa tiếp theo từ Oracle?

  2. Hàm EXP () trong Oracle

  3. nếu (chọn số (cột) từ bảng)> 0 thì

  4. cách đặt cột tăng tự động với nhà phát triển sql

  5. 12c cột IDENTITY