Oracle中触发器的创建

来源:百度知道 编辑:UC知道 时间:2024/06/04 01:03:37
CREATE TABLE SCROE (
SID VARCHAR2(10) PRIMARY KEY,
GRADE NUMBER(5,2)
);

--语句触发器
CREATE OR REPLACE TRIGGER BIUD_SCROE_A
BEFORE INSERT OR UPDATE OR DELETE
ON SCROE
BEGIN
IF USER NOT IN('SGL') THEN
RAISE_APPLICATION_ERROE(-20001, '你没有修改此表的权限');
END IF;
END;
/

INSERT INTO SCROE VALUES('003', '82');

错误: ORA-04098: 触发器'SYSTEM.BIUD_SCROE_A' 无效且未通过重新验证
请问是哪儿出了问题?
小弟是初学者,望各位能给个详细点的解释!
时间越快,追加分越高!
谢谢!

CREATE OR REPLACE TRIGGER BIUD_SCROE_A
BEFORE INSERT OR UPDATE OR DELETE
ON SCROE

BEGIN
IF USER NOT IN ('SGL') THEN
RAISE_APPLICATION_ERROR(-20001, '你没有修改此表的权限');
END IF;
END;

ERROE 写错了

把sgl也写出来

你这个根本也不用触发器啊
SGL是个用户吧?
如果其他用户要更改的话,你没赋权直接就不能修改了,用触发器这么麻烦吗?
而且user是哪里的user?
IF USER NOT IN('SGL') 这么写肯定是不行的
而且触发器能RAISE_APPLICATION_ERROE(-20001, '你没有修改此表的权限'); 吗?好像没用过这样的呢

把这句话:
RAISE_APPLICATION_ERROE(-20001, '你没有修改此表的权限');
改成:
RAISE_APPLICATION_ERROR(-20001, '你没有修改此表的权限');

---
以上,希望对你有所帮助。

这样做是意思不大。
但对于触发器应该这样写

SQL> create table test(col1 int);

Table created

SQL>
SQL> CREATE OR REPLACE TRIGGER BIUD_SCROE_A
2 BEFORE INSERT OR UPDATE OR DELETE
3 ON test
4 declare
5 v_exception exce