Oracle数据库中的保留关键字触发?

时间:2013-12-05 09:57:32

标签: sql oracle oracle11g

当我尝试在Oracle 11g中创建触发器时,出现以下错误:

  

ORA-06552:PL / SQL:终止编译单元分析

     

ORA-06553:PLS-320:此类此类表达的声明不完整或不适合。

我已经尝试将表名从EVENT更改为另一个表并且触发器编译,但我搜索保留关键字仅表示事件。触发器还有其他问题吗?

CREATE TRIGGER GEN_EVENT_ID
  BEFORE INSERT ON EVENT
  FOR EACH ROW
BEGIN
  :NEW.ID := EVENT_ID_SEQ.NEXTVAL;
END;

CREATE TABLE EVENT (
    ID NUMBER(19,0) NOT NULL,
    TIMESTAMP TIMESTAMP NOT NULL,
    NAME VARCHAR2(255)
);

1 个答案:

答案 0 :(得分:0)

Id出现在v$RESERVED_WORDS视图中,这是SQL关键字的视图。有关详细信息,请查看此link

Select *
  From V$RESERVED_WORDS
 Where KEYWORD = 'ID'

虽然在此视图中Id未标记为Reserved,但使用triggers列表中显示的列名似乎存在一些问题,如此另一个timestamp中所述3}}。

如果您阅读它,您会看到OP遇到同样的问题,但V$RESERVED_WORDS。在另一个SO问题中,建议为OP工作的解决方法。如果更改列名称,问题应该消失。


<强>更新

查看您的表格声明,您的所有列名都会显示在timestamp中。特别是Create Table my_EVENT ( event_Id Number(19,0) Not Null, event_Timestamp Timestamp Not Null, event_Name Varchar2(255) ); 列与其他SO问题(参见上面的链接)中提到的相同,因为触发器存在问题。

我的建议是重命名表格及其列。例如:

{{1}}