【问题标题】:Problems inserting data into Oracle table with sequence column via SSIS通过 SSIS 将数据插入具有序列列的 Oracle 表时出现问题
【发布时间】:2017-03-19 17:16:47
【问题描述】:

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

我点击了下面的链接-

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

并尝试创建一个函数以从 Oracle 表中获取 .nextval,但出现以下错误 -

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    例如下面的 -

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

    【讨论】:

      【解决方案2】:

      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;
      /
      

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

      【讨论】:

      • 系统变量中不存在 ORACLE_HOME 变量。我用客户端路径添加了它,但我仍然面临同样的错误。我现在将通过在脚本中指定连接字符串来尝试它,考虑到它带有密码。
      • @VKarthik 我对 ORA 错误没有更多的想法。但发布了一种可能对您有所帮助的解决方法
      • 感谢更新和解决方法。由于该错误,我遇到的问题是在脚本组件中完成任何数据库调用,所以我认为我不能这样做。我想出了下面列出的另一种方法
      猜你喜欢
      • 2021-12-18
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多