Получить соединение OCCI от соединения Pro * C? - PullRequest
3 голосов
/ 01 ноября 2011

Мы поддерживаем обширную коллекцию компонентов, написанных на C ++, которые работают под Linux, Solaris, AIX и HP / UX, которые подключаются к базе данных Oracle с использованием Pro * C. Я собираюсь написать компонент, который выполняет много динамического SQL и хотел бы реализовать эту функциональность, используя OCCI . Базовый класс для всех наших компонентов создает соединение с базой данных, используя довольно обычный Pro * C:

EXEC SQL CONNECT :user IDENTIFIED BY :password AT :alias USING :name;

И alias используется во всех будущих кодах Pro * C для взаимодействия с базой данных.

Можно ли получить соединение OCCI от этого, чтобы я мог оставить нашу реализацию базового класса без изменений, но использовать OCCI в моем компоненте?

1 Ответ

1 голос
/ 11 августа 2013

tl; dr: Вы не можете повторно использовать соединение Pro * C с OCCI, но повторное использование соединения поддерживается OTL , хотя.

Библиотека времени выполнения Pro * C внутренне использует API OCI.Oracle документирует, как получить текущий используемый дескриптор OCI:

Приложения прекомпилятора могут извлекать дескрипторы OCI и напрямую вызывать функции OCI.Однако неблокирующий режим не поддерживается, поскольку прекомпиляторы не могут обработать ошибку «все еще выполняется», которая может быть возвращена.(Руководство программиста Oracle Pro * C , 11,2g)

Вы можете получить дескриптор OCI после встроенного оператора CONNECT.

См. SQLEnvGet() /SQLSvcCtxGet() функции для деталей.

Хотя OCCI также внутренне использует OCI, он не предоставляет никакого способа «начать с» существующего дескриптора OCI.Он предоставляет только методы для получения своего дескриптора OCI после подключения к OCCI.

В отличие от OCCI, OTL позволяет вам начинать с существующего дескриптора OCI .Подобно OCCI, он предоставляет удобный API для динамического SQL в C ++.Кроме того, в отличие от OCCI, он предназначен только для заголовков (не более проблем с компилятором C ++ / STL), с открытым исходным кодом, является переносимым, а его API разработан лучше, чем OCCI.Таким образом, это, возможно, лучшая альтернатива, чем OCCI, если вы хотите взаимодействовать с Oracle на более высоком уровне, чем OCI / Pro * C.

...