Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 创建SQL触发器_Oracle_Plsql_Database Trigger - Fatal编程技术网

Oracle 创建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

我试图使用SQL在我的数据库上创建一个触发器,这样在插入表
历史记录
表后,如果属性
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。我会在字符串文本周围加上单引号。