Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle管道表函数,并将结果插入到Oracle表中_Sql_Oracle_Oracle11g_Sql Insert - Fatal编程技术网

Sql Oracle管道表函数,并将结果插入到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

我使用的是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
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