Программирование >>  Sql: полное руководство 

1 ... 179 180 181 [ 182 ] 183 184 185 ... 264


же немалая работа, и в зависимости от особенностей конкретных СУБД и драйверов а сама может привести к большим издержкам. Так что закладками нужно пользо-гься осмотрительно.

Закладки составляют основу пакетных операций ODBC - еще одной важной (нологии, предназначенной для повышения эффективности работы приложений, шкция SQLBulkOperations () позволяет приложению эффективно обновлять, домять, удалять или повторно извлекать фуппы записей, идентифицируя их место-ложение закладками. Эта функция используется совместно с блочными наборами шеей и работает со строками текущего блока записей. Приложение помещает ладки тех записей, которые оно хочет обработать, в отдельный массив, а в другие ссивы записывает добавляемые или обновляемые значения. Затем оно вызывает нкцию SQLBulkOperations О, передав ей код, указывающий, какая операция 1жна быть выполнена (обновление, удаление, добавление или выборка данных). шм образом, синтаксис выполнения всех этих операций совершенно иной, чем >1ЧН0 Описанный механизм вьшолнения пакетных операций обновления, удале-я и добавления не только очень удобен, но и чрезвычайно эффективен.

нтерфейс вызовов в Oracle (OCI)

Основным профаммным интерфейсом в Oracle является всфоенный SQL. Од-:о в этой СУБД имеется также альтернативный API, известный как интерфейс оеое Oracle (Oracle Call Interface - OCI). Он существовал много лет, оставаясь 1ктически неизменным- Несмотря на появление новых версий Oracle. Лишь с содом OracleS этот интерфейс был подвергнут значительной ревизии, и многие его 1Кции были заменены новыми, улучшенными версиями. Тем не менее, первона-ьные функции 0С1 по-прежнему поддерживаются, так как от них зависит рабо-пособность десятков тысяч приложений.

ходный вариант OCIV

в исходный вариант OCI входит около двадцати функций (табл. 19.6). >лицо 19.6. функции Ра

нкция Описание

включение к базе данных/Отключение от нее

>п () Регистрирует пользователя в базе данных Oracle

)еп {) Открывает набор записей (создает подключение) для обработки инструкции SQL ose () Закрывает открытый набор записей (завершает сеанс) >gof о Отменяет регистрацию пользователя в базе данных Oracle овая обработка инструкций

[13 0 Подготавливает (компилирует) строку инструкции SQL ее () Выполняет ранее скомпилированную инструкцию

п О Выполняет инструкцию с параметрами, для которых используется массив связанных переменных

еакр Прекращает выполнение текущей ф>Т1КЦии OCI



функция Описание

oermsg () Получает текст сообшения об ошибке Обработка параметров инструкции

obndrv () Связывает параметр с программной переменной (по его имени) obndrn () Связывает параметр с программной переменной (по его номеру) Обработка транзакций

осот () Завершает текущую транзакцию orol () Отменяет текущую транзакцию i

осоп О Включает режим автозавершения (<аждая инструкция считается транзакцией) ocof () Выключает режим автозавершения Обработка результатов запроса

odsc I) Получает описание столбцов в таблице результатов запроса oname () Получает имя столбца в таблице результатов запроса

ode fin О Связывает столбец таблицы результатов запроса с программной переменной

of etch () Извлекает следующую строку из таблицы результатов запроса

ofenO Извлекает несколько строк из таблицы результатов запроса, записывая их в массив

осап () Отменяет выполнение запроса, не дожидаясь обработки всех записей

В OCI по отношению к сеансу подключения к базе данных применяется термин набор записей . Для регистрации в базе данных Oracle программа вызывает функцию olon О, но для открытия набора записей, посредством которого будут выполняться инструкции SQL, профамма должна вызвать функцию оореп (). Делая несколько вызовов этой функции, приложение может создавать несколько наборов записей (подключений) и выполнять несколько инсфукций параллельно. Например, в одном сеансе профамма может извлекать результаты запроса, а в другом - выполнять инструкции update.

Наиболее важной особенностью OCI является его весьма высокое сходство со всфо-енным SQL. На рис. 19.25 приведены фрагменты из двух профамм, осуществляющих доступ к базе данных Oracle: одна из профамм использует всфоенный SQL, а другая -0С1. Обратите внимание на соответствие между инсфукциями всфоенного SQL connect, prepare, execute, commit и rollback и эквивалентными им функциями, в случае со всфоенной инсфукцией execute базовые переменные задаются с помощью функций obndrv () или obndrn (). Заметьте также, что всфоенная инсфукция update на этом рисунке не имеет прямого аналога в OCI: она должна быть подготовлена и выполнена посредством вызовов функций osqi3 () и оехес ().

Всароенный SQL

Интерфейс вызовов

exec sql begin declare section

char textl[255]; /* текст инструкции */ char textl[255]; /* текст

инструкции */

char text2[255]; /* текст инструкции */ char text2[255]; /* текст

инструкции */

int parml; /* параметр */ mt parmi; /* параметр */

float parm2; /* параметр */ float parm2; /* параметр */

char city[31]; /* извлекается */ char city[31]; /* извлекается */

Рис ШЗ, Cpg

> ВСтровННО!



float sales; /* извлекается /

EXEC SQL END DECLARE SECTION

EXEC SQL CONNECT USING SCOTT/TIGER;

EXEC SQL UPDATE OFFICES

SET QUOTA = 0;

EXEC SQL ROLLBACK WORK;

EXEC SQL PREPARE stmt2 USING :text2;

EXEC SQL EXECUTE Stmt2

USING :parml, :parm2;

EXEC SQL COMMIT WORK;

EXEC SQL DECLARE CI CURSOR FOR SELECT CITY, SALES FROM OFFICES;

EXEC SQL OPEN CI;

EXEC SQL FETCH СГ

INTO :city, :sales;

EXEC SQL CLOSE CI;

EXEC SQL COMMIT WORK RELEASE;

float sales; LDA *lda;

CDA *crs;

/* извлекается */ /* область

регистрации */ /* область

набора записей */

olondda, SCOTT/TIGER ,...);

oopen(crs, Ida,...); osql3(crs, UPDATE OFFICES

SET QUOTA =~ 0 ) ,

oexec(crs);

orol(Ida);

osql3(crs, text2);

obndrn(crs, 1, Sparml, sizeof (mt)); obndrn(crs, 2, Sparm2, sizeof(float)); oexec (crs) ;

ocom(Ida);

osql3(crs, SELECT CITY, SALES

FROM OFFICES ); odefin(crs, 1, city, 30, 5); odefin(crs, 2, Ssales,

sizeof(float), 4); oexec(crs);

ofetch(crs);

ocan(crs);

oclose(crs); ologof(Ida);

Рис. 19.25. Озавнвние встроенною SQL

Обработка динамических запросов в обоих программных интерфейсах Oracle происходит во многом одинаково:

Встроенная инструкция describe превращается в серию вызовов функций oname () и odsc (), извлекающих информацию об именах и типах данных столбцов в таблице результатов запроса. При каждом вызове возвращается информация об одном столбце.

Вместо того чтобы задавать поля области sqlda для привязки столбцов к базовым переменным, в OCI следует использовать функцию odef ш ().

Встроенной инструкции fetch соответствует функция ofetch ().

Встроенной инструкции CLOSE соответствует функция осап (), которая прекращает доступ к таблице результатов запроса.

Уникальной и полезной особенностью OCI является возможность прерывания запроса, выполняемого слишком долго. Когда во встроенном SQL и большинстве профаммных интерфейсов для вьшолнения запроса профамма посылает в СУБД всфоенную инсфукцию OPEN или команду выполнить , она передает управление СУБД. Управление не возвращается профамме до тех пор, пока обработка запроса не будет завершена. Таким образом, отсутствует механизм, позволяющий профамме



1 ... 179 180 181 [ 182 ] 183 184 185 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика