Структуризированный язык запросов (SQL)


Прикладное программирование - часть 2


Основная проблема "встраивания" предложения SELECT в программу заключается в том, что SELECT, как правило, порождает таблицу с множеством строк и столбцов, а включающий язык не обладает хорошими средствами, позволяющими оперировать одновременно более чем одной записью (строкой). По этим причинам необходимо обеспечить своего рода мост между уровнем множеств языка SQL и уровнем записей включающего языка. Такой мост обеспечивают курсоры. Курсор состоит, по существу, из некоторого рода указателя, который может использоваться для просмотра множества записей. Поочередно указывая каждую запись в данном множестве, он обеспечивает возможность обращения к этим записям по одной одновременно.

Однако нередко программе требуются в каждый момент времени значения только из одной строки какой-либо таблицы, и для этого используется единичное SELECT, формат которого имеет вид

SELECT [[ALL] | DISTINCT]{ * | элемент_select [,элемент_select] ...} INTO переменная [[INDICATOR] индикаторная_переменная] [,переменная [[INDICATOR] индикаторная_переменная]] ... FROM базовая_таблица | представление [псевдоним] [,базовая_таблица | представление [псевдоним]] ... [WHERE фраза] [GROUP BY фраза [HAVING фраза]];

где элемент_select - это одна из следующих конструкций:

[таблица.]* | [таблица.]столбец | SQL_функция | переменная | (выражение) | системная_переменная

Очевидно, что это описание отличается от описания подзапроса (п.2.1) наличием фразы INTO и включением в список элементов_select переменных. Переменные могут также включаться в выражения и фразы WHERE и HAVING.

Приведем несколько примеров. Получить общий вес продуктов в кладовой пансионата и занести его в переменную Общий_вес:

SELECT SUM(К_во) INTO Общий_вес FROM Наличие;

Здесь определяется единственное значение (сумма данных в столб-це) и поэтому системная переменная SQLCODE устанавливается в нуль.

Однако в следующем примере

SELECT Продукт, К_во INTO Продукт, К_продукта FROM Наличие, Продукты WHERE Наличие.ПР = Продукты.ПР AND ПР IN ( SELECT ПР FROM Продукты WHERE Продукт = 'Икра черная');




Начало  Назад  Вперед