Sql Oracle管道表函数,并将结果插入到Oracle表中
我使用的是Oracle pipelined table函数,根据返回的记录,我希望将每一行数据插入到一个Oracle表中,该表具有完全相同的列计数,即: 我已经编写了一个Sql Oracle管道表函数,并将结果插入到Oracle表中,sql,oracle,oracle11g,sql-insert,Sql,Oracle,Oracle11g,Sql Insert,我使用的是Oracle pipelined table函数,根据返回的记录,我希望将每一行数据插入到一个Oracle表中,该表具有完全相同的列计数,即: 我已经编写了一个split函数,它有一个返回类型管道化,所有这些都可以正常工作 SELECT column_value as val FROM TABLE(split(',AA,BB,CC,,,FF,GG,,,HH,')) 它在列别名val val ---- NULL AA BB CC, NULL NULL FF GG NULL NULL
split
函数,它有一个返回类型管道化
,所有这些都可以正常工作
SELECT column_value as val
FROM TABLE(split(',AA,BB,CC,,,FF,GG,,,HH,'))
它在列别名val
val
----
NULL
AA
BB
CC,
NULL
NULL
FF
GG
NULL
NULL
HH
现在,我还有一个msg\u log
表,该表具有以下定义:
CREATE TABLE msg_log
(
C001 VARCHAR2(4000 BYTE),
C002 VARCHAR2(4000 BYTE),
C003 VARCHAR2(4000 BYTE),
C004 VARCHAR2(4000 BYTE),
C005 VARCHAR2(4000 BYTE),
C006 VARCHAR2(4000 BYTE),
C007 VARCHAR2(4000 BYTE),
C008 VARCHAR2(4000 BYTE),
C009 VARCHAR2(4000 BYTE),
C010 VARCHAR2(4000 BYTE),
C011 VARCHAR2(4000 BYTE)
);
使用我的管道split
函数返回的值,我如何访问每个单独的11条记录并将它们插入我的msg_log
表中
基本上,我希望获取每一行并将其插入我的表中。Oracle安装程序: 流水线版本的:
创建或替换函数拆分(
我在瓦查尔街2号,
i_delim在VARCHAR2默认值','
)返回SYS.ODCIVARCHAR2LIST管道化
像
p_开始编号(5):=1;
p_端号(5);
c_len常数(5):=长度(i_str);
c_ld常量(5):=长度(i_delim);
开始
如果c_len>0,则
p_end:=仪表(i_str,i_delim,p_start);
而p_end>0循环
管道行(SUBSTR(i_str,p_start,p_end-p_start));
p_开始:=p_结束+c_ld;
p_end:=仪表(i_str,i_delim,p_start);
端环;
如果p_启动Oracle设置:
流水线版本的:
创建或替换函数拆分(
我在瓦查尔街2号,
i_delim在VARCHAR2默认值','
)返回SYS.ODCIVARCHAR2LIST管道化
像
p_开始编号(5):=1;
p_端号(5);
c_len常数(5):=长度(i_str);
c_ld常量(5):=长度(i_delim);
开始
如果c_len>0,则
p_end:=仪表(i_str,i_delim,p_start);
而p_end>0循环
管道行(SUBSTR(i_str,p_start,p_end-p_start));
p_开始:=p_结束+c_ld;
p_end:=仪表(i_str,i_delim,p_start);
端环;
如果p_start msg_log有11列,而split函数只返回一列(11行,1列)插入msg_log
(没有列的显式列表)预期有11列,因此会出现错误。@NickKrasnov好的,那么有没有办法根据我的问题实现我想要的,即拆分每一行并插入列?是否希望旋转split()函数生成的结果?列表有12个值(不是11个值)由于后面有一个逗号,因此第12个值将有NULL
。msg_log有11列,而split函数只返回一列(11行,1列)插入msg_log
(没有列的显式列表)预期有11列,因此会出现错误。@NickKrasnov好的,那么有没有办法根据我的问题实现我想要的,即拆分每一行并插入列?是否希望旋转split()函数生成的结果?列表有12个值(不是11个值)因为后面有一个逗号,所以第12个值将出现NULL
。
C001 | C002 | C003 | C004 | C005 | C006 | C007 | C008 | C009 | C010 | C011
:--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- | :---
null | AA | BB | CC | null | null | FF | GG | null | null | HH