Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpory_normalnye_kit.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
129.94 Кб
Скачать

62. Встраивание sql в прикладные программы.

SQL-операторы можно встраивать в триггеры, хранимые процедуры и пракладные программы. Для того, чтобы встроить SQL-операторы в программный код, необходимо преодолеть два затруднения. Во-первых, нужен какой-то способ, позволяющий записывать результаты выполнения SQL-операторов в программные переменные. Это можно сделать по-разному. В одних случаях для этого используются объектно-ориентированные программы, в других применяются более простые методы. Например, в PL/SQL следующий оператор присваивает переменной rowcoimt значение, равное количеству строк в таблице CUSTOMER:

SELECT COUNT(*) INTO rowcoimt FROM CUSTOMER;

Вторая трудность заключается в несоответствии парадигм SQL парадигмам языков программирования. Язык SQL оперирует множествами: большинство операторов SQL возвращают таблицу или набор строк. В отличие от этого, программы оперируют отдельными элементами или строками. Из-за этого отличия оператор, подобный приведенному ниже, не имеет смысла:

SELECT Name INTO custName FROM CUSTOMER;

Если в таблице CUSTOMERимеется 100 строк, то запрос столбца Name возвратит 100 значений, в то время как переменная custName может принять только одно значение.

Чтобы перодолеть это затруднение, результаты выполнения SQL-операторов обрабатываются как псевдофайлы. SQL-оператор возвращает набор строк. На первую строку помещается курсор, и данная строка обрабатывается. Затем курсор перемещается на следующую строку, и так далее, пока не будут обработаны все строки. Типичный процесс обработки выглядит так:

Открыть файл SQL (SELECT * FROM CUSTOMER);

Поместить курсор на первую строку;

Пока курсор не вышел за пределы таблицы {

Присвоить custName значение столбца Name в строке под курсором;

63. Диалекты языка sql в субд.

Несмотря на наличие международного стандарта ANSI SQL, многие компании, занимающиеся разработкой СУБД, вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Каждая из реализаций языка SQL в конкретной СУБД называется диалектом. Функции, которые добавляются к стандарту языка разработчиками коммерческих реализаций, принято называть расширениями. Например, в стандарте языка SQL определены конкретные типы данных, которые могут храниться в базах данных. Во многих реализациях этот список расширяется за счет разнообразных дополнений.

Выделяют три уровня соответствия стандарту ANSI/ISO — начальный, промежуточный и полный. В настоящее время не существует ни одного диалекта, полностью соответствующего стандарту. Производители СУБД (например, Oracle, Microsoft, Borland, Informix, Sybase) применяют собственные реализации SQL, отвечающие как минимум начальному уровню соответствия стандарту и содержащие некоторые расширения, специфические для данной СУБД. Не существует двух совершенно идентичных диалектов. Более того, поскольку разработчики баз данных вводят в системы все новые функциональные средства, они постоянно расширяют свои диалекты языка SQL, в результате чего отдельные диалекты все больше и больше отличаются друг от друга. Это имеет свои достоинства и недостатки.

Конкретная реализация языка, может включать в себя более широкие возможности по сравнению со стандартом SQL, например, больше типов данных, большее количество команд, больше дополнительных возможностей у имеющихся команд. Такие возможности делают работу с конкретной СУБД более эффективной. Кроме того, такие нестандартные возможности языка проходят практическую апробацию и со временем могут быть включены в стандарт. Недостаток в том, что различия в синтаксисе реализаций SQL затрудняют перенос приложений из одной системы в другую. Например, если приложение было написано для базы данных MS SQL Server с использованием своего диалекта SQL – языка Transact-SQL, то при переносе системы в базу данных ORACLE, не все конструкции языка будут понятны соответствующему диалекту SQL – языку PL/SQL.

В широко распространенных в настоящее время СУБД используются следующие диалекты языка SQL:

PL/SQL – в СУБД Oracle;

Transact-SQL – в СУБД Microsoft SQL;

Informix-SQL – в СУБД Informix;

Jet SQL – Microsoft Access.

Язык Jet SQL почти соответствует стандарту ANSI SQL. Основные различия языков Jet SQL и ANSI SQL состоят в следующем:

- они имеют разные наборы зарезервированных слов и типов данных;

- разные правила применимы к оператору Between, используемому для определения условий выборки записей;

- подстановочные знаки ANSI и Microsoft Jet, которые используются в операторе Like, различны;

- язык Jet SQL обычно предоставляет пользователю большую свободу, например, разрешается группировка и сортировка по значению выражения;

-язык Jet SQL позволяет использовать более сложные выражения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]