当我尝试在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)
);
答案 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}}