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

问题描述

我已经使用regexp将逗号分隔的代码拆分为多个列,并将其插入到目标表中。 我需要将其放在pl / sql过程中。 它应该先清空目标表,然后在每次运行时填充它。 它应该是一个循环,并逐行插入。

DB是Oracle 12c。

Delete from dest_data;
insert into dest_data(seq_id,rad_id,column_1,column_2,column_3,column_4,column_5,column_6,column_7)
with rcte (id,sep_String,lvl,result) as (
  select rad_id,string,1,regexp_substr(string,'(.*?)(,|$)',null,1)
  from source_data
  union all
  select id,lvl + 1,regexp_substr(sep_String,1)
  from rcte
  where lvl <= regexp_count(data,',')
)
select *
from (
  select rad_seq.nextval,id,result --here i wish to use sequence but am not able to--
  from rcte
)
pivot (max(result) as col for (lvl) in (1,2,3,4,5,6,7));

序列被用作第一列是pk,并且必须是所有行的唯一编号assignEd。

解决方法

考虑到要插入的数据,只有该列的问题需要自动递增,

在Oracle 12c中,我们有两个选项可以在创建表本身时实现它,

选项1: 使用“身份列”

可以使用here浏览带有IDENTITY选项的更多选项。

CREATE TABLE dest_data (
  seq_id NUMBER GENERATED BY DEFAULT AS IDENTITY,.....
  .....
);

选项2:使用序列默认值

更多包含默认列值here的格式

CREATE TABLE dest_data (
  seq_id NUMBER DEFAULT rad_seq.nextval,.....
  .....
);

使用上述任何选项创建表后,请从插入语句中排除seq_id的插入,并将由oracle处理。

编辑:-

忘记添加点了,如果这是一次活动,那么您不需要专用的过程,可以通过BEGIN END内的匿名块来实现,并且无论如何您都需要一个过程创建一个不带参数的语句,并在过程主体内复制两个语句和一个提交,而无需任何循环即可生成序列。希望清楚,否则请尝试提供反馈。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...