【发布时间】:2016-01-03 19:21:18
【问题描述】:
我正在尝试编写一个触发器,它基本上会在另一个表上创建条目时更新一个表。
CREATE OR REPLACE TRIGGER "DTISCDB_OWNER"."REQUEST_CONTEXT_TR"
AFTER INSERT OR UPDATE ON REQUEST_CONTEXT
FOR EACH ROW
BEGIN
:NEW.REQUEST_DATETIME := SYSDATE;
:NEW.ID := TRUNC(DBMS_RANDOM.VALUE(100000000000000000000000000000000000,999999999999999999999999999999999999));
SELECT bre_conditions_seq.NEXTVAL INTO :OLD.seq_number FROM dual;
SELECT REQUEST_CONTEXT.CURRENT_STATE INTO :NEW.STATE FROM REQUEST_CONTEXT;
SELECT REQUEST_CONTEXT.REQUEST_ID INTO :NEW.REQUEST_ID FROM REQUEST_CONTEXT;
INSERT INTO REQUEST_LIFECYCLES(ID,SEQ_NUMBER,STATE,REQUEST_ID,REQUEST_DATETIME)
VALUES(:NEW.ID,:NEW.seq_number,:NEW.STATE,:NEW.REQUEST_ID,:NEW.REQUEST_DATETIME);
END;
【问题讨论】:
-
这个错误似乎暗示
request_context中没有request_datetime。有没有?一旦你解决了这个问题,你就不能改变:old.seq_number,这样就没有意义了。您不能从request_context中选择。为什么要生成一个随机数而不是仅仅使用一个序列来生成:new.id? -
您是否尝试使用
:NEW来引用您要插入的表中的列,而不是触发器所针对的表?您可以直接在values子句中使用sysdate。:OLD参考仍然令人困惑。你似乎对新旧代表什么感到困惑。