Ссылочная ошибка служб SSIS Oracle DataAccess - вызов процедуры PL / SQL с параметрами нестандартного типа - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь вызвать процедуру PL / SQL с параметрами нестандартного типа из рабочего процесса служб SSIS.

Я пытался:

  • Использование соединения ADO.NETменеджер для Oracle - не работает, так как он не позволяет отображать параметры.

  • Использование диспетчера соединений OLEDB - хорошо, но только для простых типов данных в INPUT / OUTPUT ->не решает мою проблему, так как я не могу использовать пользовательские типы, и у меня нет возможности использовать параметры IN OUT (которые также встречаются в процедурах на базе данных Oracle).

Затем я попытался создать собственное сопоставление через C #, реализовав все необходимые классы и интерфейсы, используемые для сопоставления пользовательского UDT.Таким образом мне удалось заставить его работать, передавая параметры пользовательского типа в и из процедуры.(POC создан как ConsoleApplication).

Учебное пособие, которым я руководствовался при создании пользовательских классов: https://www.codeproject.com/Articles/1139474/ODP-NET-User-Defined-Type-Implementation

Я пытался использовать тот же код, который я использовал в консольном приложении в скрипте SSISЗадача.И здесь я столкнулся со странной проблемой ☹ Для реализации customType, используемого в процедуре, я использовал ссылку Oracle.DataAccess.Всякий раз, когда я добавляю эту ссылку к задаче сценария, я получаю следующую ошибку при выполнении:

Задача сценария DTS: Ошибка выполнения

Ошибка возникает, как только я внедряюкласс, который использует ссылку на Oracle.DataAccess.Само объявление класса, кажется, вызывает эту ошибку, потому что даже когда я не использую их В scriptMain ошибка остается.Всякий раз, когда я закомментирую классы (но оставляю ссылку в скрипте), компонент выполняется без ошибок…

КОНФИГУРАЦИЯ: Я использую Visual Studio 2017 Enterprise Edition,
TargetServerVersion:SQL Server 2017
Целевая среда в пакете: .NET Framework 4.5
Параметр среды PATH для клиента Oracle: C: \ app \ client32 \ product \ 12.2.0 \ client_1 \ bin

Я попытался изменитьцель SQL Server, Target Framework и некоторые другие параметры на уровне проекта и пакета, но ничего не работает.

Кто-нибудь знает, как решить эту проблему, чтобы я мог использовать свое пользовательское сопоставление C # в задаче сценария?

Любые другие решения, предлагающие процедуры вызова с пользовательскими параметрами, также приветствуются:)

Наконец, если кто-нибудь знает хороший автоматический преобразователь UDT, я был бы благодарен :) Я попробовал Odapter - хорошо, но использует Oracle.ManagedDataAccess вместо DataAccess, и я не могу использовать OracleDbType.Object там ...

РЕДАКТИРОВАТЬ: мне удалось обнаружить, что проблема возникает всякий раз, когда я реализую интерфейс из ссылки (например,IOracleCustomType).Если я использую этот тип только в качестве параметра в методе или около того, сценарий выполняется.Как только я добавляю класс, реализующий интерфейс, появляется ошибка «Не удалось загрузить скрипт для выполнения» ..

...