![]() |
|
![]() ![]() ![]() |
|
Torsten |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: нет Всего: 7 |
Приветствую. Столкнулся с проблемой нужно для курсора реализовать DefineByName, но я не уверен что это вообще возможно, т.к. во всех example используется только define by pos, и гугл по запросу define by name - ничего нужно не выдает. Однако, например, в php есть функция oci_define_by_name. Я попробовал поизучать исходники пыхи, но реализацию найти не удалось, она где-то спрятана под тонной макросов ZEND_***.
Цель очень простая. Сделать возможность обработки результата процедуры через курсор и получать доступ к полям курсора по имени, чтобы в случае изменения кол-ва параметров в курсоре не требовалось менять маппинг полей в приложении. Таким образом не будет требоватся синхронное обновление базы и приложений, в случае добавление в новых параметров в курсор. Это сообщение отредактировал(а) Torsten - 30.3.2012, 10:29 --------------------
We have no begining, we have no end. We are infinite. |
|||
|
||||
Torsten |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: нет Всего: 7 |
Все оказалось достаточно просто, но много времени ушло на отладку и поиск одной ошибки.
Рабочий код практически описан в документации в OCI в разделе 6 про describe, там в конце пример. Там показывается как из OCIStmt (в нем так же хранится и курсор) получить информацию о том что там за поля и какого они типа и размера. После этого уже можно автоматизировать defineByPos (с помощью абстрацкии типа Field) и делать fetch, чтобы получать данные. Т.е. сделали запрос, пробежались по курсора добавили в список поля с необходимыми типами данных, именем и размером, сделали define by pos по этому списку, ну а программист по имени поля в курсоре получает его значение, через какую-нибудь абстракцию. Пример (используется функция принимающая 1 параметр и возращающая курсор) :
Это сообщение отредактировал(а) Torsten - 5.4.2012, 17:19 --------------------
We have no begining, we have no end. We are infinite. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C++: Базы данных" | |
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Базы данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |