Oracle APEX含嵌套集合/自定义对象类型表INSERT报错排查
Oracle INSERT语句报错排查
原始问题语句
当前使用的插入语句如下:
insert into person values(312,'john','doe',to_date("10.10.2000"),COLECTION_OF_CONTACTS('123123'),ADRESA('city','street','123','123'),'first_floor')
结合给出的表结构、自定义类型定义,语句存在以下核心错误:
错误点说明
- 表名错误:要写入的目标表名为
UKLIZECKA,语句中写的person不存在,会直接触发「表或视图不存在」报错。 - 引号使用错误:Oracle中字符串、日期字面量必须用单引号包裹,双引号仅用于标记大小写敏感/带特殊字符的对象名。语句中
to_date("10.10.2000")的日期串用了双引号,Oracle会将10.10.2000识别为列名,直接触发ORA-00984: 列不允许在此处报错。同时to_date必须显式指定日期格式掩码,避免依赖会话默认NLS参数导致日期解析错误。 - 外键约束前置依赖不满足:
UKLIZECKA表存在两个外键约束,插入数据前必须满足:- 传入的ID值
312,必须已经在父表ZAMESTNANEC的ID列中存在 - 传入的
OBLAST_UKLIDU_ID值'first_floor',必须已经在父表OBLAST_UKLIDU的ID列中存在
不满足任意一项都会触发外键完整性约束报错。
- 传入的ID值
- (非阻塞但建议修正)类型名拼写错误:定义的嵌套表类型名
COLECTION_OF_CONTACTS存在拼写失误(正确拼写为COLLECTION_OF_CONTACTS,少写了一个L),如果类型已经创建成功,当前插入语句保持和类型名一致的拼写即可,但建议后续修正避免后续开发混淆。
修正后可执行语句
INSERT INTO UKLIZECKA ( ID, JMENO, PRIJMENI, DATUM_NAROZENI, KONTAKT_UKLIZECKA, ADRESA, OBLAST_UKLIDU_ID ) VALUES ( 312, 'john', 'doe', to_date('10.10.2000', 'dd.mm.yyyy'), COLECTION_OF_CONTACTS('123123'), ADRESA('city','street','123','123'), 'first_floor' );
注意:执行上述语句前,请先确认两个外键关联的父表中已经存在对应关联值,否则依然会触发外键报错。
内容的提问来源于stack exchange,提问作者David Augusta
相关产品推荐
相关产品推荐

