Сейчас на сайте
Сейчас на сайте 0 пользователей и 0 гостей.

Резюме 25

Команды SQL вкладываются в процедурные языках, чтобы объединить силы двух подходов. Некоторые дополянительные средства SQL необходимы, чтобы выполнить эту работу. Вложенные команды SQL транслируемые программой, называемой прекомпилятором, в форму пригодную для использования транслятором главного языка, и исполяьзуемые в этом главном языке, как вызовы процедуры к подпрограммам которые создает прекомпилятор, называются - модулями доступа. ANSI поддерживает вложение SQL в языки: ПАСКАЛЬ, ФОРТРАН, КОБОЛ, и PL/I. Другие языки также используются, особенно Си. В попытке кратко описать вложенный SQL, имеются наиболее важные места в этой главе:

  • Все вложенные команды SQL начинаются словами EXEC SQL и заканчиваются способом который зависит от используемого главного языка.
  • Все главные переменные доступные в командах SQL, должны быть объявлены в разделе объявлений SQL прежде, чем они будут использованы.
  • Всем главным переменным должно предшествовать двоеточие когда они используются в команде SQL.
  • Запросы могут сохранять свой вывод непосредственно в главных переменных, Используя предложение INTO, если и только если, они выбирают единственную строку.
  • Курсоры могут использоваться для сохранения вывода запроса, и доступа к одной строке в каждый момент времени. Курсоры бывают объявлеными ( если определяют запрос в котором будут содержаться), открытыми( если выполяняют запрос ), и закрытыми ( если удаляют вывод запроса из курсора ). Если курсор открыт, команда FETCH, используется чтобы перемещать его по очереди к каждой строке вывода запроса.
  • Курсоры являются модифицируемыми или только-чтение. Чтобы стать модифицируемым, курсор должен удовлетворять всем критериям которым удовлетворяет просмотр; кроме того, он не должен использовать предложений ORDER BY или UNION, которые в любом случае не могут использоваться просмотрами. Не модифицируемый курсор является курсором только-чтение.
  • Если курсор модифицируемый, он может использоваться для определения, какие строки задействованы вложенными командами UPDATE и DELETE через предложение WHERE CURRENT OF. DELETE или UPDATE должны быть вне той таблицы к которой кур- сор обращаетс в запросе.
  • SQLCODE должен быть объявлен как переменна числового типа для каждой программы которая будет использовать вложенный SQL. Его значение устанавливается автоматически после выполянения каждой команды SQL.
  • Если команда SQL выполянена как обычно, но не произвела вывода или ожидаемого изменения в базе данных, SQLCODE = 100. Если команда произвела ошибку, SQLCODE будет равняться некоторому аппаратно- определенному отрицательному числу которое описывает ошибку. В противном случае, SQLCODE = 0.
  • Предложение WHENEVER может использоваться для определения действия которое нужно предпринять когда SQLCODE = 100 (не найдено) или когда SQLCODE равен отрицательному числу ( SQLERROR ). Действием может быть или переход к некоторой определенной метке в программе ( GOTO ) или отсутствие какого-либо действия вообще( продолжить). Последнее, установлено по умолчанию.
  • Числовые переменные могут также использоваться как переменные indicator. Переменные indicator следуют за другим именами переменных в команде SQL, без каких бы то ни было посторонних символов кроме (необязательного) слова INDICATOR.
  • Обычно, значение переменной indicator = 0. Если команда SQL пытается поместить NULL значение в главную переменную которая использует indicator, indicator будет установлен в отрицательное значение. Этот факт можно использоваться чтобы предотвращать ошибки, и для помечания NULL значений SQL для специальной обработки их в глав- ной программе.
  • Переменна indicator может использоваться для вставки NULL значений в команды SQL - INSERT или UPDATE. Она также может принимать поляожительное значение указывающее на длину отбрасываемой части строки не поместившейся в предельные границы какой- нибудь переменной, куда эта строка помещалась.