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

BIND BIND PLS-00049

Bạn đang đề cập đến các biến thể ràng buộc bằng 'A' ở đầu và không có gạch dưới, như :OLD.AWitnessID , nhưng cột trong bảng của bạn chỉ là WITNESS_ID . Vì vậy, chúng không khớp và tạo ra lỗi này. Bạn thậm chí không có WITNESS_TYPE cột.

Sau đó, trong insert của bạn báo cáo bạn cũng có tên cột trong bảng kiểm tra sai. Bạn cũng đặt biến thành Update nhưng hãy kiểm tra UPDATE - phần so sánh phân biệt chữ hoa chữ thường đối với các giá trị chuỗi.

Điều này biên dịch với giản đồ của bạn:

CREATE OR REPLACE TRIGGER TRG_PLAUDWIT
AFTER INSERT OR DELETE OR UPDATE ON PL_WITNESS
FOR EACH ROW
DECLARE
  v_trigger_task varchar2(10);
BEGIN
  IF UPDATING THEN
    v_trigger_task := 'UPDATE';
  ELSIF DELETING THEN
    v_trigger_task := 'DELETE';
  ELSIF INSERTING THEN
    v_trigger_task := 'INSERT';
  ELSE
    v_trigger_task := NULL;
  END IF;

  IF v_trigger_task IN ('DELETE','UPDATE') THEN
    INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
      AUDIT_DATE, AUDIT_ACTION)
    VALUES (:OLD.Witness_ID, :OLD.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
      SYSDATE, v_trigger_task);
  ELSE    
    INSERT INTO PLAUDWIT (AUD_AWitnessID, AUD_AWitnessType, AUDIT_USER,
      AUDIT_DATE, AUDIT_ACTION)
    VALUES (:NEW.Witness_ID, :NEW.FK1_WITNESS_TYPE_ID, UPPER(v('APP USER')),
      SYSDATE, v_trigger_task);
  END IF;
END TRG_PLAUDWIT;
/

SQL Fiddle không có lỗi biên dịch .




  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 thế nào để biết Oracle Client đã cài đặt là 32 bit hay 64 bit?

  2. Ngoại lệ triển khai weblogic:PaddingException:Không thể thực hiện việc bỏ đệm:byte đệm không hợp lệ

  3. Thủ tục hoặc công việc Oracle để sao chép dữ liệu tự động từ một lược đồ này sang một lược đồ khác dựa trên dòng thời gian

  4. Các dòng mới không mong muốn khi lưu kết quả sqlplus vào tệp xml

  5. Giá trị trả về PLSql