You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
/

代码说明

  1. 修正表名:INSERT语句使用正确的table7_prc
  2. 修正调用名:使用正确的存储过程名addnewmem
  3. 调整逻辑:通过嵌套SELECT,先按逗号拆分得到每个用户的Name;Family组合,再对每个组合按分号拆分,分别提取Name和Family字段,确保两者对应存入同一条记录
  4. 移除冗余代码:删除无意义的第二个独立SELECT

内容的提问来源于stack exchange,提问作者Its_faezeh0308

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:15:52