获取字符串,按分隔符拆分并插入到 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 ID
s(在 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 中的表过程 [重复]的主要内容,如果未能解决你的问题,请参考以下文章