WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Использование SQL с другим языком (вложенный SQL).

Использование SQL с другим языком (вложенный SQL).


Дата публикации: 06-07-2008

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

Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Август 2024 (1)
Май 2024 (1)
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Неизвестный автор:

"Ссылка – текст, да в ней намёк."

Опрос

Какой аудио плеер Вы используете?

Winamp
Light Alloy
foobar2000
Apollo
AIMP
1by1
iTunes
jetAudio
Другой...