所以我想创建一个改变记录时间戳的触发,我有这个迄今为止的Oracle SQL触发错误:ORA-00933
create or replace TRIGGER job_date_set
AFTER INSERT OR UPDATE OF start_date, closing_date ON jobs
FOR EACH ROW
BEGIN
IF UPDATING THEN
CASE
WHEN :OLD.closing_date != :NEW.closing_date THEN
UPDATE jobs
SET closing_date = to_date(to_date(:NEW.closing_date,'DD/MON/YYYY')||' 23:59:59','DD/MON/YYYY HH24:MI:SS')
WHERE :OLD.job_id = job_id;
WHEN :OLD.start_date != :NEW.start_date THEN
UPDATE jobs
SET start_date = to_date(to_date(:NEW.start_date,'DD/MON/YYYY') ||' 00:00:00','DD/MON/YYYY HH24:MI:SS')
WHERE :OLD.job_id = job_id;
END CASE;
END IF;
IF INSERTING THEN
UPDATE jobs
SET closing_date = to_date(to_date(:NEW.closing_date,'DD/MON/YYYY') ||' 23:59:59','DD/MON/YYYY HH24:MI:SS')
SET start_date = to_date(to_date(:NEW.start_date,'DD/MON/YYYY')||' 00:00:00','DD/MON/YYYY HH24:MI:SS')
WHERE :OLD.job_id = job_id;
END IF;
END;
这里是错误的描述: 编译失败,第17行(16:54:27)与编译错误关联的行号与第一个BEGIN语句相关。这只影响数据库触发器的编译。 PL/SQL:ORA-00933:SQL命令未正确结束编译失败,第15行(16:54:27)与编译错误关联的行号与第一个BEGIN语句相关。这只影响数据库触发器的编译。 PL/SQL:SQL语句忽略
通过它的声音,它不认为我的if语句已经关好,但我不知道在哪里,我出了错
它看起来像jobs.closing_date和jobs.start_date是'日期'列。如果是这样,你的'to_date(to_date('应该是'to_date(to_char(' - 你想把日期转换成DD/MON/YYYY格式的字符串以便追加''23:59:59'并将其转换回日期(可能更容易“trunc”它,加1并减去'interval'1'秒。) –