Проблемы со вставкой данных в таблицу Oracle со столбцом последовательности через SSIS

Я делаю вставку данных в таблицу в Oracle, для которой задана последовательность в одном из столбцов, например, в столбце Id. Я хотел бы знать, как выполнять загрузку данных в такие таблицы.

Я перешел по ссылке ниже -

Можно ли использовать OleDbConnections с компонентом скрипта?

и попытался создать функцию для получения .nextval из таблицы Oracle, но я получаю следующую ошибку:

Ошибка при попытке получить текст для ошибки ORA-01019

Я понял, что ручная установка значения через пакет, то есть с помощью задачи «Сценарий» для перечисления значений, но не увеличивает последовательность, и это вызывает проблему. Как нам с этим справиться? Любые ссылки, которые могут помочь мне решить эту проблему?

Я использую SSIS-2014, но не могу пометить его из-за нехватки очков репутации.


person VKarthik    schedule 06.11.2016    source источник


Ответы (2)


Я создал обходной путь для решения этой проблемы. Я создал промежуточные таблицы назначения без столбца, который принимает идентификатор последовательности. После того, как данные вставлены, я вызываю оператор SQL, чтобы получить данные в основные таблицы из промежуточной таблицы и использую функцию .nextval. Наконец, усечение/удаление таблицы в зависимости от необходимости. Все равно было бы интересно узнать, как то же самое можно сделать с помощью скрипта, а не с помощью этого обходного пути.

Например, что-то вроде ниже -

insert into table_main
select table_main_sequence_name.nextval
,*
from (
select *
from table_stg
)
person VKarthik    schedule 06.11.2016

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

Затем выполните приращение в script. И после этого вызовите вторую процедуру для увеличения последовательности:

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

Это не очень хороший подход, но, возможно, он решит вашу проблему.

person Kacper    schedule 06.11.2016
comment
Переменная ORACLE_HOME не присутствовала в системных переменных. Я добавил его с путем клиента, но все равно сталкиваюсь с той же ошибкой. Теперь я попробую, указав строку подключения в сценарии, учитывая, что это пароль. - person VKarthik; 06.11.2016
comment
@VKarthik У меня больше нет идей об ошибке ORA. Но опубликовал один обходной путь, который может вам помочь - person Kacper; 06.11.2016
comment
спасибо за обновление и обходной путь. Проблема, с которой я сталкиваюсь, заключается в том, что любой вызов базы данных выполняется в компоненте скрипта из-за этой ошибки, поэтому я не думаю, что смогу пойти с этим. Я выяснил другой метод, как указано ниже - person VKarthik; 07.11.2016