КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Выполнение однострочных и многострочных запросов с помощью внедренных операторов SQL и курсоров
Внедрение операторов SQL в прикладные программы Язык SQL как специальный язык не имеет многих средств, присущих универсальным языкам высокого уровня (С++, Delphi, Visual Basic и др.), например таких, как команды управления ходом выполнения программы IF...THEN...ELSE, GO TO или DO WHELE. Для устранения этого недостатка стандартом ISO/EC 9075:2003 предусматривается возможность внедрения операторов в клиентские приложения, разрабатываемые на языках высокого уровня, которые называют базовыми языками. В этом случае практически все операторы SQL однозначно выполняют свои задачи, кроме оператора SELECT. На практике существует два способа использования операторов SQL в программах базового языка: внедрение операторов и применение программного интерфейса. Внедрение операторов SQL. При использовании данного способа отдельные операторы SQL внедряются непосредственно в текст исходной программы и чередуются с операторами базового языка, что позволяет создавать приложения, которые могут непосредственно обращаться к таблицам базы данных и работать с ними. В этом случае специальные программы — предкомпиляторы — преобразуют текст исходной программы, производя замену операторов SQL соответствующими вызовами процедур СУБД, после чего этот текст компилируется. Стандарт ISO/EC 9075:2003 предусматривает обязательную поддержку внедренных операторов SQL для языков программирования ADA, С, COBOL, Fortran, Pascal, PL/1. Применение программного интерфейса — API. Данный способ использования операторов SQL состоит в том, что программисту предоставляется возможность с помощью API обращаться к стандартному набору функций из создаваемых им программ. Отличие данного способа от предыдущего состоит в том, что устраняется необходимость предкомпиляции текста программы, т.е. в этом случае текст исходной программы более удобен для анализа. Соответствующие API имеются в СУБД Oracle. В СУБД Access предлагается программный интерфейс ADO, представляющий собой надстройку над интерфейсом ODBC. Внедренные операторы подразделяют на статические и динамические. Текст статического оператора должен быть полностью внедрен в текст программы, а к динамическому оператору во время выполнения программы можно обращаться, как к модулю или подпрограмме.
Как уже говорилось, внедрение всех операторов SQL кроме SELECT не вызывает особых проблем при разработке программ на базовых языках. Простое же внедрение оператора SELECT в текст программы приводит к тому, что результирующий набор данных будет состоять только из одной строки соответствующей таблицы. Это обусловлено тем, что операторы языков программирования высокого уровня работают только с отдельными элементами, представляющими собой отдельные строки данных, в то время как оператор языка SQL может обрабатывать произвольное число строк данных. Для устранения такой несогласованности в языке SQL предусмотрены специальные функции, позволяющие связывать переменные базового языка со строками таблиц баз данных, которые обрабатываются (возвращаются) по одной при каждом последовательном обращении. С учетом этого все запросы на языке SQL подразделяют на две группы: однострочные и многострочные. Очевидно, что результатом выполнения однострочного запроса является только одна строка данных. Результатом же выполнения многострочного запроса могут быть структуры, состоящие из произвольного числа строк от нуля до п. Однострочные запросы. Язык SQL для реализации внедренных однострочных запросов предусматривает использование специального оператора единичной выборки с форматом, не отличающимся от формата оператора SELECT, за исключением дополнительной конструкции INTO, предназначенной для указания имен переменных базового языка, в которые следует поместить результаты запроса. Конструкция INTO должна следовать непосредственно за списком полей оператора SELECT. Между выражениями в списке SELECT и переменными базового языка в конструкции INTO должно существовать взаимно-однозначное соответствие для обеспечения выборки сведений из таблицы базы данных. Рассмотрим пример. Пусть необходимо выбрать сведения о владельце недвижимости с номером С021 из таблицы с именем Privat-Ower. Используем следующую конструкцию оператора SELECT:
Здесь значение столбца f Name будет помещено в переменную базового языка f irstName, значение столбца IName — в переменную lastName, а значение столбца address — в переменную address (вместе с индикатором значения NULL, для которого используется переменная adresslnd). Естественно, все применяемые в данном операторе переменные должны быть объявлены заранее согласно правилам базового языка. Многострочные запросы. Для реализации запросов, в результате выполнения которых может быть получено произвольное количество строк, язык SQL предоставляет программисту механизмы выборки данных, основанные на использовании курсоров. Например, в языке PL/SQL курсор позволяет программе построчно обрабатывать результаты выполнения запроса, т.е. в этом случае он представляет собой указатель на определенную строку в результирующем наборе данных. Курсор можно передвигать с одной строки на другую и после обработки одной строки переходить к следующей. Перед работой курсор должен быть объявлен и открыт, а после завершения работы — закрыт. Для объявления курсора используется следующая структура: Рассмотрим пример текста программы, объявляющей курсор:
В данном примере объявляется курсор с именем propertyCursor для выбора данных из таблицы PropertyForRent по полям propertyNo, street, city при условии, что значение переменной staff No равно 'SL41' Для открытия объявленного курсора применяется оператор OPEN, имеющий следующую структуру:
После открытия курсора производится выбор информации из таблицы с применением оператора FETCH согласно заданным в курсоре условиям:
При обработке оператора FETCH значение столбца propertyNo будет помещено в переменную базового языка propertyNo, а значение столбцов street и city — соответственно в переменные street и city. Поскольку при выполнении запроса оператор FETCH обрабатывает только одну строку таблицы, в тексте программы на базовом языке он должен быть помещен внутрь соответствующего цикла, обеспечивающего требуемое число просмотров всех записей таблицы. В этом случае СУБД помещает в переменную SQLCODE значение NOT FOUND. Если таблица не содержит ни одной строки данных, при выполнении запроса в первом же шаге цикла будет обнаружено их отсутствие и переменной SQLCODE вернется значение NOT FOUND. После выполнения запроса курсор должен быть закрыт с помощью оператора CLOSE, имеющего следующую структуру:
Дата добавления: 2014-01-07; Просмотров: 2204; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |