PL/SQL触发器编译报错ORA-00904:PEOPLE.FLATNO无效标识符求助
问题排查与解决:ORA-00904无效标识符与触发器编译错误
错误原因
触发器代码中直接使用PEOPLE.FLATNO访问字段是核心错误。在Oracle行级触发器中,无法通过表名直接获取当前触发行的数据,必须使用:NEW(插入/更新后的新值)或:OLD(更新/删除前的旧值)伪记录来引用对应字段,否则数据库会因找不到有效标识符抛出ORA-00904错误。
修正后的触发器代码
SET SERVEROUTPUT ON; CREATE OR REPLACE TRIGGER TUTU BEFORE INSERT OR DELETE OR UPDATE ON PEOPLE FOR EACH ROW BEGIN IF INSERTING THEN UPDATE FLAT SET Status = 'Hired' WHERE FLAT.FLATNO = :NEW.FLATNO; END IF; IF DELETING THEN UPDATE FLAT SET Status = 'Not Hired' WHERE FLAT.FLATNO = :OLD.FLATNO; END IF; END; /
关键说明
INSERTING事件:用:NEW.FLATNO获取新插入的住户记录关联的公寓编号,更新对应公寓状态为已租用。DELETING事件:用:OLD.FLATNO获取被删除住户原关联的公寓编号,将公寓状态改回未租用。- 若后续需要处理住户更换公寓的
UPDATING事件,需同时更新:OLD.FLATNO(原公寓状态置为未租用)和:NEW.FLATNO(新公寓状态置为已租用)。
内容的提问来源于stack exchange,提问作者sifatul supto
相关产品推荐
相关产品推荐

