获取字符串,按分隔符拆分并插入到 Oracle 中的表过程 [重复]

Posted

技术标签:

【中文标题】获取字符串,按分隔符拆分并插入到 Oracle 中的表过程 [重复]【英文标题】:Get String, Split By delimiter and inset to table Procedure in Oracle [duplicate] 【发布时间】:2021-08-14 08:30:41 【问题描述】:

我有 Names 表,z_names_seq 序列用于 AutoGenerate IDs(在 names 表中) 并触发 z_names_on_insert 使用 z_names_seq 生成 ID

--创建名称表

CREATE TABLE z_names (ID number,
                      NAME VARCHAR2(200))

--名称表的序列

CREATE SEQUENCE z_names_seq
    MINVALUE 1
    START WITH 1
    INCREMENT BY 1;

--名称表中ID的触发器

create or replace TRIGGER z_names_on_insert
    BEFORE INSERT ON z_names
    FOR EACH ROW
BEGIN
    SELECT z_names_seq.nextval
    INTO :new.ID
    FROM dual;
END;

还有什么问题:

编写获取字符串值的过程,用分隔符分隔并插入到z_names表中(ID来自触发器,NAME来自逗号分隔的输入字符串(,) )。

输入输出示例:

输入:john, jim, jack

输出:

ID NAME
1 john
2 jim
3 jack

【问题讨论】:

【参考方案1】:

将字符串拆分为行。这是一个显示如何做到这一点的选项。 INSERT 不包含 ID 列,因为它是由触发器填充的。

SQL> create or replace procedure p_ins (par_string in varchar2) is
  2  begin
  3    insert into z_names (name)
  4      select trim(regexp_substr(par_string, '[^,]+', 1, level))
  5        from dual
  6        connect by level <= regexp_count(par_string, ',') + 1;
  7  end;
  8  /

Procedure created.

SQL> exec p_ins('john,jim,jack');

PL/SQL procedure successfully completed.

SQL> select * From z_names;

        ID NAME
---------- --------------------
         1 john
         2 jim
         3 jack

SQL>

【讨论】:

以上是关于获取字符串,按分隔符拆分并插入到 Oracle 中的表过程 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用oracle SQL按分隔符位置拆分字符串

使用正则表达式在Oracle中按分隔符拆分字符串

拆分'$'分隔的字符串并插入到表中

使用oracle按分隔符位置拆分字符串

使用 regexp_substr 在 Oracle 中按空格和字符拆分字符串作为分隔符

Oracle PL/SQL 程序在源表中拆分逗号分隔的数据并推送到目标表中