Oracle 创建SQL触发器
我试图使用SQL在我的数据库上创建一个触发器,这样在插入表Oracle 创建SQL触发器,oracle,plsql,database-trigger,Oracle,Plsql,Database Trigger,我试图使用SQL在我的数据库上创建一个触发器,这样在插入表历史记录表后,如果属性FINISHED=“T”,则消息属性是“FINISHED”,否则,如果FINISHED=“F”,则消息是“notfinished” 这是我目前试图运行的代码,上面说 “使用编译错误创建的触发器” 有人能告诉我这句话有什么不对吗?谢谢大家! CREATE OR REPLACE TRIGGER MESSAGE_TR AFTER INSERT ON HISTORY FOR EACH ROW BEGIN IF (HI
历史记录表后,如果属性FINISHED=“T”
,则消息属性是“FINISHED”
,否则,如果FINISHED=“F”
,则消息是“notfinished”
这是我目前试图运行的代码,上面说
“使用编译错误创建的触发器”
有人能告诉我这句话有什么不对吗?谢谢大家!
CREATE OR REPLACE TRIGGER MESSAGE_TR
AFTER INSERT
ON HISTORY
FOR EACH ROW
BEGIN
IF (HISTORY.FINISHED="T")
THEN
INSERT INTO HISTORY(MESSAGE) VALUES("FINISHED");
ELSEIF (HISTORY.FINISHED="F")
INSERT INTO HISTORY(MESSAGE)VALUES("NOT FINISHED");
END;
/
我想这就是你的意图:
CREATE OR REPLACE TRIGGER MESSAGE_TR
BEFORE INSERT
ON HISTORY
FOR EACH ROW
BEGIN
:NEW.MESSAGE := (CASE WHEN :NEW.FINISHED = 'T' THEN 'FINISHED' ELSE 'NOT FINISHED' END);
END;
请注意,这是一个before insert触发器,因为它打算修改正在插入的行。我想这就是您想要的:
CREATE OR REPLACE TRIGGER MESSAGE_TR
BEFORE INSERT
ON HISTORY
FOR EACH ROW
BEGIN
:NEW.MESSAGE := (CASE WHEN :NEW.FINISHED = 'T' THEN 'FINISHED' ELSE 'NOT FINISHED' END);
END;
请注意,这是一个before insert触发器,因为它打算修改插入的行。您使用的是MySQL还是Oracle?这段代码不会同时在它们两个上运行。@jarlh我使用的是Oracle。我会在字符串文本周围加上单引号。您使用的是MySQL还是Oracle?这段代码不会同时在它们两个上运行。@jarlh我使用的是Oracle。我会在字符串文本周围加上单引号。