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用户删除不掉,报ORA-04098错误!
INSERT INTO table RETURNING 触发器生成的主键从 SQL Server 链接服务器到 Oracle (11g)