Oracle Db 11g 触发器语法

Posted

技术标签:

【中文标题】Oracle Db 11g 触发器语法【英文标题】:Oracle Db 11g trigger syntax 【发布时间】:2014-05-02 16:28:07 【问题描述】:

我尝试在 Oracle DB 11g 中创建触发器,但没有成功。

CREATE OR REPLACE TRIGGER mytable_JOBUPD 
AFTER UPDATE OF jedan, trip ON mytable 
FOR EACH ROW 
BEGIN 
ADD_mytable_JOB ( :old.jedan, :old.trip, 'update', sysdate);
END mytable_JOBUPD;​

发送此错误:

Compilation failed,line 1 (18:23:50)

PLS-00103:遇到以下符号“,”:in out ... long double ref char time timestamp interval date binary national character nchar 编译失败,第 3 行 (18:23:50) PLS-00103:在预期以下情况之一时遇到符号“BEGIN”:nan 无限悬空的非空编译失败,第 5 行 (18:23:50) PLS-00103:在预期以下情况之一时遇到符号“END”:, ;返回返回

所以一切都是问题,但是什么?我在数据库中的列类型正常,但仍然出现此错误?

【问题讨论】:

【参考方案1】:

将“FOR EACH ROW”替换为:

REFERENCING OLD AS old NEW AS new FOR EACH ROW

我在 11g 中有几个类似的触发器,它们遵循相同的语法。

编辑:您可能还需要在此之后、开始之前进行声明。如果不声明任何变量,我会这样做:

DECLARE
    -- no variables
BEGIN
  --Code

编辑 2:

您在示例帖子中的语法在其他方面是正确的。这些错误似乎确实表明缺少(或多余的)引号、逗号或分号。

【讨论】:

以上是关于Oracle Db 11g 触发器语法的主要内容,如果未能解决你的问题,请参考以下文章

oracle 11g 带触发器的存储过程

在 Oracle 11g 中创建触发器的问题

删除oracle 11g用户删除不掉,报ORA-04098错误!

INSERT INTO table RETURNING 触发器生成的主键从 SQL Server 链接服务器到 Oracle (11g)

oracle中的trigger有几种啊

Oracle 中的触发器有几种?