我的触发器出现以下错误 [警告] ORA-24344: 成功但编译错误 3/62 PL/SQL:ORA-00904:“PEOPLE”。“FLATNO”:无效标识符 3/9 PL/SQL:忽略 SQL 语句 7/66 PL/SQL:ORA-00904:“PEOPLE”。“FLATNO”:无效标识符 7/9 PL/SQL:忽略 SQL 语句 (2: 0): 警告:已编译但有编译错误
我的触发点:
设置服务器输出打开; 创建或替换触发短裙 在插入、删除或更新人员之前 对于每一行 开始 如果插入则 更新 FLAT SET 状态 = '雇用' WHERE FLAT.FLATNO = PEOPLE.FLATNO; 如果结束;
IF DELETING THEN
UPDATE FLAT SET Status = 'Not Hired' WHERE FLAT.FLATNO = PEOPLE.FLATNO;
END IF;
结束; /
我的桌子:
创建平面表格(
公寓编号,
租金号码,
FlatSize VARCHAR(20),
FlatType VARCHAR(20),
面对VARCHAR(15),
房间编号,
建筑物编号,
状态 VARCHAR(20),
主键(FlatNo),
外键(建筑物编号) 参考建筑物(建筑物编号)
);
创建表人( 人员 ID 号, 会员编号, 付费号码, 到期编号, HireDate VARCHAR(15), 联系号码唯一, 公寓编号, 主键(人员ID), 外键(FlatNo) 参考文献 FLAT(FlatNo) );
您确定这就是您的表格的“确切”定义方式吗?表中的列名采用驼峰式大小写,但不带引号。在 Oracle 中,当创建的列周围带有引号时,列名区分大小写,并且始终需要在语句中加引号。我的猜测是,您已经创建了在列名周围加上引号并混合大小写的表,这就是需要在任何地方引用这些列的方式。 显示引用列影响的基本示例:
create table t
(
"My_column" VARCHAR2(100)
);
Table T created.
update t set MY_COLUMN = 'foobar';
SQL Error: ORA-00904: "MY_COLUMN": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
update t set "My_column" = 'foobar';
0 rows updated.
drop table t;
Table T dropped.
create table t
(
My_column VARCHAR2(100)
);
Table T created.
update t set MY_COLUMN = 'foobar';
0 rows updated.
与您的错误相同。我猜这就是问题所在。您的表格是这样创建的:
CREATE TABLE FLAT(
"FlatNo" NUMBER,
"Rent" NUMBER,
...
如果您处于项目早期,我建议删除并重新创建不带引号标识符的表,因为您必须引用列名到处
:所有 pl/sql 代码、所有 sql 语句等 阅读更多相关信息
这里