一个简单的触发器报错
create or replace trigger changetwo
after UPDATE OF tname
ON system.teachers
for EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('The old value is:' || :OLD.TNAME ||
'The new one is:' || :NEW.TNAME);
UPDATE EM.ORA_TEST_TWO
SET EM.ORA_TEST_TWO.NAME = :NEW.TNAME
WHERE EM.ORA_TEST_TWO.ID = SYSTEM.TEACHERS.TID;
END CHANGETWO;
如果主表中的tname更改,就触发ora_test_two中id和tid关联对应的name.报两个错:
一个是说system.teachers.tid标识符无效,另一个是update那条语句statement ignored。请指教。
Error: PL/SQL: ORA-00904: "SYSTEM"."TEACHERS"."TID": 标识符无效
Line: 10
Text: WHERE EM.ORA_TEST_TWO.ID = SYSTEM.TEACHERS.TID;
Error: PL/SQL: SQL Statement ignored
Line: 8
Text: UPDATE EM.ORA_TEST_TWO
------解决方案--------------------你这个触发器是建在那个表空间上的 ?
EM 有没有建dblink ?
这个用户有没有读取system 表空间的权限?
------解决方案--------------------我认为是权限的问题,em用户的权限是读取任何的表,但并不代表em用户可以在任何表上建触发器。建议你先用SYSTEM用户登陆下,然后把表TEACHERS的所有权限授予用户em。然后再看看触发器是否可用
------解决方案--------------------create or replace trigger changetwo
after UPDATE OF tname ON system.teachers
for EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('The old value is:'
------解决方案--------------------
:OLD.TNAME
------解决方案--------------------
'The new one is:'
------解决方案--------------------
:NEW.TNAME);
UPDATE EM.ORA_TEST_TWO
SET EM.ORA_TEST_TWO.NAME = :NEW.TNAME
WHERE EM.ORA_TEST_TWO.ID = :NEW.TID; --改成:new试试
END CHANGETWO;