ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ ОСНОВНОГО ЯЗЫКА В SQL
Основной способ которым SQL и части базового языка ваших программ
будут связываться друг с другом - это с помощью значений переменных. Естественно, что разные
языки распознают
различные типы данных для переменных. ANSI определяет эквиваленты SQL для четыре базовых
языков - ПЛ/1, Паскаль,
КОБОЛ, и ФОРТРАН; Эквиваленты для других языков - определяет
проектировщик. Имейте в виду, что типы, такие как DATE, не распознаются ANSI; и следовательно
никаких эквивалентных
типов данных для базовых языков, не существуют в стандарте ANSI. Более сложные типы данных
базового языка, такие как
матрицы, не имеют эквивалентов в SQL. Вы можете использовать переменные из главной программы
во вложенных
операторах SQL везде, где вы будете использовать выражения значений. ( SQL, используемый в
этой главе, будет
пониматься как к вложенный SQL, до тех пор пока это не будет оговорено особо. ) Текущим
значением переменной, может
быть значение, используемое в команде. Главные переменные должны -
* быть обьявленными в SQL DECLARE SESSION (
РАЗДЕЛ ОБЪЯВЛЕНИЙ ) кото- рый будет описан далее.
* иметь совместимый тип данных с их функциями в команде SQL (
например, числовой тип если они вставляется в числовое поле )
* быть назначеными значению во время их использования
в команде SQL, если команда SQL самостоятельно не может сделать назначение.
* предшествовать двоеточию (:) когда они
упоминаются в команде SQL. Так как главные переменные отличаются от имен столбцов SQL
наличием у них двоеточия, вы
можете использовать переменные с теми же самыми именами что и ваши столбцы, если это конечно
нужно. Предположим
что вы имеете четыре переменных в вашей программе, с именами: id_num, sales- person, loc, и
comm. Они содержат значения
которые вы хотите вставить в таблицу Продавцов. Вы могли бы вложить следующую команду SQL в
вашу программу:
EXEC
SQL INSERT INTO Salespeople VALUES ( :id_num, :salesperson, :loc, :comm)
Текущие значения этих переменных будут помещены
в таблицу. Как вы можете видеть, переменная comm имеет то же самое имя что и столбец в
который это значение
вкладывается. Обратите внимание, что точка с запятой в конце команды отсутствует. Это потому,
что соответствующее завершение для вложенной команды SQL зависит от языка для которого
делается вложение. Для Паскаля и PL/1, это будет
точка с запятой; для КОБОЛА, слово END-EXEC ; и для ФОРТРАНА не будет никакого завершения. В
других языках это
зависит от реализации, и поэтому мы договоримся что будем использовать точку с запятой (в
этой книге) всегда, чтобы не
противоречить интерактивному SQL и Паскалю. Паскаль завершает вложенный SQL и собственные
команды одинаково -
точкой с запятой. Способ сделать команду полностью такой как описана выше, состоит в том,
чтобы включать ее в цикл и
повторять ее, с различными значениями переменных, как например показано в следующем примере:
while not end-ot-file (input)
do begin readln (id_num, salesperson, loc, comm); EXEC SOL INSERT INTO Salespeople VALUES (:id_num, :salesperson, :loc, :comm);
end;
Фрагмент программы на ПАСКАЛЕ, определяет цикл, который будет считывать значения из файла,
сохранять их в
четырех проименованных переменных, сохранять значения этих переменных в таблице Продавцов, и
затем считывать
следующие четыре значения, повторяя этот процесс до тех пор пока весь входной файл не
прочитается. Считается, что
каждый набор значений завершается возвратом каретки ( для незнакомых с Паскалем, функция
readln считывает вводимую
информацию и переходит на следующую строку источника этой информации). Это дает вам
простойспособ передать данные
из текстового файла в реляционную структуру. Конечно, вы можете сначала обработать данные
любыми возможными способами на вашем главном языке, например для исключения всех
комиссионных ниже значения .12
while not end-ot-file (input)
do begin readln (id_num, salesperson, loc, comm);
if comm > = .12 then EXEC SQL INSERT INTO Salespeople VALUES (:id_num,
:salesperson, :loc, :comm); end;
Только строки которые встретят условие comm >= .12 будут вставлены в вывод. Это показывает
что можно использовать и циклы и условия как нормальные для главного языка.