SQL触发器 "column list not valid for this trigger type"

标签 sql triggers oracle12c

<分区>

所以我想创建触发器:

CREATE TRIGGER add_primary_key
AFTER INSERT ON CAJ
FOR EACH ROW
WHEN (ID_CAJ IS NULL)
DECLARE
maximum NUMBER;
BEGIN
  maximum := SELECT MAX(ID_CAJ) FROM caj;
  if (maximum <> 0)
    UPDATE caj
    SET ID_CAJ = maximum + 1;
    WHERE CAJ_ID = NULL
    maximum = maximum +1;
END;

出现此错误:

"invalid NEW or OLD specification"
*Cause:    An invalid NEW or OLD specification was given for a column.
*Action:   Re-specify the column using the correct NEW or OLD specification.

你们有什么想法吗?

最佳答案

我想是 Oracle。这是不正确的:

AFTER INSERT OF ID_CAJ
IN caj

INSERT 插入行[s]。列列表与此处无关。应该是ON表名

AFTER INSERT ON CAJ

如果您希望触发器在插入的行具有 NULL 值时设置新的主键,请参阅此主题以了解 Oracle 使用 SEQUENCE 执行此操作的常用方法 create table with sequence.nextval in oracle

关于SQL触发器 "column list not valid for this trigger type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984827/

相关文章:

java - 创建序列时出现 SQL 错误

sql - 如何从 sql 触发器启动用户脚本

从中选择并更新同一个表的 MYSQL 触发器给出错误 #1241 - 操作数应包含 1 列

mysql - 插入触发器更新某些列

sql - 如何使用新属性值更新 JSON 列?

Oracle 12c 与 Data-guard,创建 PDB 失败

php - 按结果搜索排序?

java - SQL 按同一列的两组条件排序

sql - 根据值从结果集中选择特定记录

oracle - 在 Oracle 12c R2 中,LogMiner 是否支持长度超过 30 个字符的表/列名称?