【问题标题】:if insert error in oracle trigger creation?如果在 oracle 触发器创建中插入错误?
【发布时间】:2010-06-04 19:21:58
【问题描述】:
  CREATE TRIGGER Background_Process_Report_trit
AFTER INSERT
ON Background_Process_Report
FOR EACH ROW
IF INSERT(PROCESS_NAME)
BEGIN
    SET EXECUTION_TIMESTAMP := NEW.TIMESTAMP; 
END;
/

process_name -- 我的 Background_Process_Report 表中的列。但我想在每次创建 process_name 时更新(由 java 应用程序),触发更新 EXECUTION_TIMESTAMP 表中的时间。 但它抛出了编译错误..

错误:

如果插入(PROCESS_NAME)
*
第 5 行的错误:
ORA-04079: 无效的触发器规范

如何解决这个错误

【问题讨论】:

  • 你想让IF INSERT(PROCESS_NAME)做什么?

标签: oracle oracle10g oracle11g


【解决方案1】:

如果 EXECUTION_TIMESTAMP 是你所说的表,那么它必须有一个你要更新的列,我们称之为 TIMESTAMP_COL。触发器类似于:

CREATE TRIGGER Background_Process_Report_trit
AFTER INSERT
ON Background_Process_Report
FOR EACH ROW
WHEN (NEW.PROCESS_NAME IS NOT NULL)
BEGIN
    UPDATE EXECUTION_TIMESTAMP
    SET TIMESTAMP_COL = NEW.TIMESTAMP
    WHERE ???;  -- Change ??? to the appropriate condition
END;
/

我假设“IF INSERT(PROCESS_NAME)”的意思是“如果将非空值插入 PROCESS_NAME”并创建了一个匹配的 WHEN 子句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多