SQL 触发器中的 IF ELSE 语句
SQL IF ELSE statement in trigger
我想在 table 上触发每个插入。有时 name_event 是可用的目标 table 的存储库,可以插入。有时它不可用,所以我需要检查文件夹 table:
中的代码
create or replace TRIGGER scheme2.Logger
BEFORE INSERT OR UPDATE ON scheme2.payments
FOR EACH ROW
BEGIN
INSERT INTO scheme1.db(ID, NAME_EVENT, TIME_EVENT)
VALUES( :NEW.id
, IF (select repo.code
from scheme2.repository repo
where repo.id = :NEW.repository_id) IS NOT NULL
THEN
(select repo.code
from scheme2.pay_repository repo
where repo.id = :NEW.repository_id)
ELSE
(select env.repository_code
from scheme2.folder env
where env.id = :NEW.folder_id)
, SYSDATE);
END;
我试过这段代码,但出现编译错误:
Error(2,1): PL/SQL: SQL Statement ignored
第 2 行是每一行的行
Error(4,5): PL/SQL: ORA-00936: Unknown expression.
第 4 行是插入行
如何修复错误?
create or replace TRIGGER scheme2.Logger BEFORE INSERT OR UPDATE ON scheme2.payments
FOR EACH ROW
declare
VAR_NEVENT number(3);
BEGIN
select repo.code into VAR_NEVENT from scheme2.repository repo
where repo.id = :NEW.repository_id)
IF VAR_NEVENT IS NOT NULL THEN
select repo.code INTO VAR_NEVENT from scheme2.pay_repository repo where repo.id = :NEW.repository_id
ELSE (select env.repository_code into VAR_NEVENT from scheme2.folder env where env.id = :NEW.folder_id)
END IF;
INSERT INTO scheme1.db(ID, NAME_EVENT, TIME_EVENT)
VALUES(:NEW.id, VAR_NEVENT , SYSDATE);
END;
类似于上面的东西.. 首先 select 你的结果在一个变量中然后将它插入到 table.
我想在 table 上触发每个插入。有时 name_event 是可用的目标 table 的存储库,可以插入。有时它不可用,所以我需要检查文件夹 table:
中的代码create or replace TRIGGER scheme2.Logger
BEFORE INSERT OR UPDATE ON scheme2.payments
FOR EACH ROW
BEGIN
INSERT INTO scheme1.db(ID, NAME_EVENT, TIME_EVENT)
VALUES( :NEW.id
, IF (select repo.code
from scheme2.repository repo
where repo.id = :NEW.repository_id) IS NOT NULL
THEN
(select repo.code
from scheme2.pay_repository repo
where repo.id = :NEW.repository_id)
ELSE
(select env.repository_code
from scheme2.folder env
where env.id = :NEW.folder_id)
, SYSDATE);
END;
我试过这段代码,但出现编译错误:
Error(2,1): PL/SQL: SQL Statement ignored
第 2 行是每一行的行
Error(4,5): PL/SQL: ORA-00936: Unknown expression.
第 4 行是插入行
如何修复错误?
create or replace TRIGGER scheme2.Logger BEFORE INSERT OR UPDATE ON scheme2.payments
FOR EACH ROW
declare
VAR_NEVENT number(3);
BEGIN
select repo.code into VAR_NEVENT from scheme2.repository repo
where repo.id = :NEW.repository_id)
IF VAR_NEVENT IS NOT NULL THEN
select repo.code INTO VAR_NEVENT from scheme2.pay_repository repo where repo.id = :NEW.repository_id
ELSE (select env.repository_code into VAR_NEVENT from scheme2.folder env where env.id = :NEW.folder_id)
END IF;
INSERT INTO scheme1.db(ID, NAME_EVENT, TIME_EVENT)
VALUES(:NEW.id, VAR_NEVENT , SYSDATE);
END;
类似于上面的东西.. 首先 select 你的结果在一个变量中然后将它插入到 table.