2016-11-06 10 views
2

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

Я следовал ниже ссылке -

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

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

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

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

Я использую 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