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.