Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Использование переменных основного языка в SQL




Основной способ, которым SQL и части базового языка ваших программ будут связываться друг с другом — это с помощью значений переменных. Естественно, что разные языки распознают различные типы данных для переменных. ANSI определяет эквиваленты SQL для четырех базовых языков — ПЛ/1, Паскаль, КОБОЛ, и ФОРТРАН; все это подробности описаны в Приложении B. Эквиваленты для других языков — определяет проектировщик.

Имейте в виду, что типы, такие как DATE, не распознаются ANSI, и, следовательно никаких эквивалентных типов данных для базовых языков в стандарте ANSI не существует. Более сложные типы данных базового языка, такие как матрицы, не имеют эквивалентов в SQL. Вы можете использовать переменные из главной программы во вложенных операторах SQL везде, где вы будете использовать выражения значений. (SQL, используемый в этой главе, будет пониматься как встроенный SQL, до тех пор пока это не будет оговорено особо.)

Текущим значением переменной, может быть значение, используемое в команде. Главные переменные должны:

· быть объявленными в SQL DECLARE SESSION (РАЗДЕЛ ОБЪЯВЛЕНИЙ), который будет описан далее;

· иметь совместимый тип данных с их функциями в команде SQL (например, числовой тип, если они вставляется в числовое поле);

· должны иметь назначенное значение во время их использования в команде SQL, если команда SQL самостоятельно не может сделать назначение;

· им должно предшествовать двоеточие, когда они упоминаются в команде SQL

Так как главные переменные отличаются от имен столбцов SQL наличием у них двоеточия, вы можете использовать переменные с теми же самыми именами, что и ваши столбцы, если это конечно нужно.

Предположим, что вы имеете четыре переменных в вашей программе, с именами: id_num, salesperson, 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, будут вставлены в вывод. Это показывает, что можно использовать и циклы, и условия как нормальные для главного языка.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...