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

kích hoạt nếu khác

Cú pháp PL / SQL không cho phép bao gồm các câu lệnh SQL trong mệnh đề IF.

Cách tiếp cận đúng là tách câu lệnh SELECT ra và sau đó kiểm tra kết quả của nó. Vì vậy, đó sẽ là:

create or replace trigger trig1 
after insert on table_1 
for each row 
declare
    v table2.column2%type;
begin
    select table2.column2 
    into v
    from table2 
    where table2.id= :new.id;

    if v is null
    then 
        update table2 
        set table2.column2 = :new.column1 
        where table2.id = :new.id; 
    end if; 
end trig1;

Lưu ý rằng điều này không xử lý sự tồn tại của nhiều hàng trong table2 phù hợp với tiêu chí hoặc thực sự không có hàng nào phù hợp. Nó cũng không xử lý khóa.

Ngoài ra, hãy nhớ rằng mã như thế này không hoạt động tốt trong môi trường nhiều người dùng. Đó là lý do tại sao tôi đề cập đến việc khóa. Bạn thực sự nên sử dụng logic thủ tục để xử lý các loại yêu cầu này. Mặc dù vẫn thường xảy ra với các tác nhân gây nhầm lẫn nhưng thủ phạm thực sự là một mô hình dữ liệu kém. table2.column2 lẽ ra đã được chuẩn hóa khi không còn tồn tại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng phân biệt trên một cột và thực hiện theo thứ tự trên một cột khác sẽ gây ra lỗi

  2. Bảng thay đổi trên trình kích hoạt SQL SQL

  3. Tạo chỉ mục

  4. Chuyển đổi giá trị số nguyên từ cột db thành văn bản trong oracle

  5. Cấu hình kết nối giữa máy khách và máy chủ Oracle 10g