通过SSIS

时间:2016-11-06 07:21:08

标签: oracle oracle11g ssis ssis-2012 script-component

我正在将数据插入到Oracle中的一个表中,该表在其中一列中设置了序列,如Id列。我想知道如何将数据加载到这样的表中。

我按照以下链接 -

It's possible to use OleDbConnections with the Script Component?

并尝试创建一个函数来从Oracle表中获取.nextval但是我收到以下错误 -

尝试检索错误ORA-01019的文本时出错

我意识到通过包手动设置值,即使用脚本任务来枚举值,但不是递增序列,而是导致问题。我们如何处理它?任何可以帮我解决的链接?

我正在使用SSIS-2014,但由于声誉点不足,我无法对其进行标记。

2 个答案:

答案 0 :(得分:1)

我创建了一个解决此问题的解决方法。我创建了目标的临时表,没有采用序列ID的列。插入数据后,我调用SQL语句将数据从登台表中获取并使用.nextval函数。最后根据需要截断/删除表。知道如何通过脚本处理同样的事情而不是解决这个问题仍然很有趣。

例如下面的内容 -

insert into table_main
select table_main_sequence_name.nextval
,*
from (
select *
from table_stg
)

答案 1 :(得分:0)

ORA-01019可能与您安装了多个Oracle客户端有关。如果ORACLE_HOME变量只包含一个客户端,请检查它。

我正在考虑的一个解决方法是创建两个处理序列的过程。一开始就获得价值:

create or replace function get_first from seq as return number
seqid number;
begin
select seq_name.nexval into seqid from dual;
return seqid;
end;
/

然后在脚本中进行增量。然后调用第二个程序来增加序列:

create or replace procedure setseq(val number) as
begin 
execute immediate 'ALTER SEQUENCE seq_name INCREMENT BY ' || val;
end;
/

这不是一个好方法,但可能会解决你的问题