PL/SQL编译错误ORA-00904排查及数据插入逻辑实现需求
问题分析与修正
原代码存在的问题
- 表名不匹配:创建的表是
table7_prc,但INSERT语句中误用了table_prc7,触发ORA-00904标识符无效错误 - 存储过程调用名错误:调用
addnewmembe,但实际定义的存储过程是addnewmem - 逻辑错误:两个独立的SELECT无法将拆分后的Name和Family对应存入同一条记录,且第二个SELECT没有执行插入操作,属于冗余代码
修正后的代码
-- 确保表结构正确(如果已创建可跳过) Create Table table7_prc ( Family VARCHAR2(200), Name VARCHAR2(200) ); CREATE OR REPLACE PROCEDURE addnewmem ( str IN VARCHAR2 ) AS BEGIN INSERT INTO table7_prc (Name, Family) -- 先按逗号拆分得到每个用户的Name;Family组合 SELECT -- 拆分分号获取Name(第1部分) regexp_substr(user_item, '[^;]+', 1, 1) AS Name, -- 拆分分号获取Family(第2部分) regexp_substr(user_item, '[^;]+', 1, 2) AS Family FROM ( -- 外层按逗号拆分字符串,得到每个用户的条目 SELECT regexp_substr(str, '[^,]+', 1, level) AS user_item FROM dual CONNECT BY regexp_substr(str, '[^,]+', 1, level) IS NOT NULL ); COMMIT; END; / -- 正确调用存储过程 BEGIN addnewmem('faezeh;Ghanbarian,pari;izadi'); END; /
代码说明
- 修正表名:INSERT语句使用正确的
table7_prc - 修正调用名:使用正确的存储过程名
addnewmem - 调整逻辑:通过嵌套SELECT,先按逗号拆分得到每个用户的
Name;Family组合,再对每个组合按分号拆分,分别提取Name和Family字段,确保两者对应存入同一条记录 - 移除冗余代码:删除无意义的第二个独立SELECT
内容的提问来源于stack exchange,提问作者Its_faezeh0308
相关产品推荐
相关产品推荐

