2016-11-06 51 views
2

我正在将数据插入到Oracle中的一个表中,该表中的某个列中有一个序列设置为Id列。我想知道如何将数据加载到这些表中。通过SSIS将序列列插入Oracle表的问题

我也跟着下面的链接 -

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

,并试图创建一个函数来从Oracle表得到.nextval,但我得到了下面的错误 -

错误,而试图检索文本的错误ORA-01019

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

我正在使用SSIS-2014,但我不能标记它,因为我并不是因为缺乏声誉点。

回答

1

我创建了一个解决办法,以满足这个问题。我创建了目标的暂存表,而没有使用序列标识的列。数据插入后,我然后调用SQL语句将数据从暂存表中获取到主表中并使用.nextval函数。最后根据需要截断/丢弃表格。知道如何通过脚本处理这个相同的事情,而不是解决这个问题,这仍然很有趣。

比如像下面 -

insert into table_main 
select table_main_sequence_name.nextval 
,* 
from (
select * 
from table_stg 
) 
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; 
/

这是不好的做法,但也许它会解决你的问题

+0

ORACLE_HOME变量是不存在系统变量。我添加了它与客户端路径,但仍然面临着同样的错误。现在我将通过在脚本中指定连接字符串来考虑它是否使用密码来尝试它。 – VKarthik

+0

@VKarthik我对ORA错误没有更多的想法。但发布了一个workaroud,可能会帮助您 – Kacper

+0

感谢您的更新和解决方法。我遇到的问题是在脚本组件中完成任何数据库调用,因为这个错误,所以我不认为我可以去那个。我已经找出了下面列出的另一种方法 – VKarthik