为什么我无法创建触发器呢?
现在有三个表:endpoint_ip,cpu,memory.这三个表中,endpoint_ip是主表,记录局域网中每台主机的主机名和ip地址。其中,主机名:hostname为主键。而另外两个表:cpu和memory,则记录每台主机的cpu,memory工作情况。若从主表endpoint_ip中删除一条记录,自然要考虑删除从表中的相关记录。从表都是以hostname作为外键的。于是,我创建这样的触发器:
CREATE OR REPLACE TRIGGER del_ip
BEFORE DELETE ON endpoint_ip FOR EACH ROW
BEGIN
DELETE FROM cpu WHERE cpu.hostname=:OLD.hostname;
DELETE FROM memory WHERE memory.hostname=:OLD.hostname;
END del_ip;
我以system/manager as sysdba身份登陆数据库。
结果有如下的错误提示:
CREATE OR REPLACE TRIGGER del_ip
*
ERROR 位于第 1 行:
ORA-04089: 无法对 SYS 所有的对象创建触发器
帮帮忙……郁闷!
问题点数:0、回复次数:6Top
1 楼fairy715()回复于 2005-06-08 16:56:17 得分 0
自己顶一下,up!Top
2 楼fuxia(双子星)回复于 2005-06-08 17:35:41 得分 0
你用sys用户登录创建Top
3 楼softdeveloper(笨蛋天才)回复于 2005-06-10 11:01:59 得分 0
是不是建立了外键?可能跟外健有关Top
4 楼huyoujun(huyoujun)回复于 2005-06-11 11:10:29 得分 0
你当前登陆的权限不够,用dba登陆,或是对此表空间有全部权限的用户登陆后就可以创建了,我以前也碰上过这样的问题,仔细想想很简单就解决了Top
5 楼fairy715()回复于 2005-06-11 16:45:33 得分 0
楼上的大侠,我就是用dba登录的阿:system/manager as sysdba;后来我试着用sys登录的:sys/change_on_install as sysdba;可是仍然是相同的问题的:
CREATE OR REPLACE TRIGGER del_ip
*
ERROR 位于第 1 行:
ORA-04089: 无法对 SYS 所有的对象创建触发器
难道说这是oracle中的机制,就是不能对sys所有的对象创建触发器?Top
6 楼huyoujun(huyoujun)回复于 2005-06-13 01:00:21 得分 0
晕,是我搞错了,你说的是正解,不用sys创建trigger,上次我就是用sys建的,跟你的情况一样,后来用一个normal用户建的,成功了。Top




