Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 24. Как поддерживается порядок в базе да11ных SQL

комбинации полей sпum и cnum для таблицы Customers, причем, поле snum входит в со­ став индекса первым, о чем свидетельствует значение поля cposition.

Можно использовать и подзапросы. Ниже приводится способ просмотра данных столбцов, принадлежащих только таблицам каталога:

SELECT *

FROM SYSTEMCOLUMNS

WHERE tname IN

(SELECT tname

FROM SYSTEMCATALOG);

Для краткости опущены выходные данные для этой команды, которые содержат единственное значение для каждого столбца каждой таблицы каталога. Этот запрос можно разместить в представлении SYSTEMTABCOLS, чтобы перейти к представле­

нию SYSTEMTABLES.

Итоги

Итак, SQL-системы используют множество таблиц, которое называется системным каталогом структуры базы данных. Для этих таблиц можно формулировать запросы, но их нельзя обновлять. Кроме того, можно добавлять столбцы комментариев в таблицы SYSTEMCATALOG и SYSTEMCOLUMNS (а также удалять их). Создание представле­ ний для этих таблиц - превосходный способ точно определить ту информацию, к кото­

рой пользователи имеют право доступа.

На этом мы заканчиваем рассмотрение SQL в интерактивном режиме. В следую­

щей главе будут рассмотрены вопросы применения SQL непосредственно·в програм­

мах, написанных на языках программирования; такое использование позволяет

извлечь преимущества взаимодействия программы с базой данных.

276

 

 

 

 

 

--·---

··--------

··----------------------

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работаем на SQL

1.Сформулируйте запрос к каталогу с целью получить для каждой таблицы, имею­ щей более четырех столбцов, имя таблицы, ее владельца, а также имена и типы данных для столбцов.

2.Сформулируйте запрос к каталогу с целью определить, сколько синонимов су­ ществует для каждой таблицы базы данных. Помните, что одноименные синони­

мы, принадлежащие различным владельцам, следует рассматривать как два

различных синонима.

· 3. Определите количество таблиц, имеющих индексы для более пятидесяти про­ центов столбцов.

(Ответы даны в прило:жении А.)

277

25

[П [[] [Ы] [i] [] ~ u о

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

программирования

(встроенный SQL)

Глава 25. Использование SQL с другими языками программирования

Эта глава научит вас использовать SQL для усиления возможностей про­

грамм, написанных на других языках программирования. Непроцедурный харак­ тер SQL придает ему выразительную силу и влечет ряд ограничений. Для освобождения от ограничений можно встраивать SQL в программы, написанные на том или ином языке программирования. Для примеров в этой главе выбран язык Pascal, поскольку он является простейшим и имеет (полуофициальный) стан­

дарт ANSI.

Что включается во встроенный SQL?

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

Почему SQL называется встроенным?

В этой книге много говорилось о возможностях SQL. SQL состоит из множества отдельных команд, в то время как интерактивный SQL обычно выполняется по одной команде за один такт работы SQL-системы. Логические конструкции, испqльзуемые в

большинстве структурных языков программирования, такие как if ". theп, for ... do и while ... repeat, в SQL отсутствуют, и не имеется базы для принятия решения: стоит ли выполнять действие, как выполнять действие и как долго выполнять действие, осно­ вываясь на результатах его последнего выполнения. Кроме того, интерактивный SQL не может выполнять никаких действий со значениями, за исключением их ввода в таб­ лицы, их нахождения и вывода с помощью запросов непосредственно на какое-либо

устройство.

Но более традиционные языки программирования являются в этом плане более мощными. Они проектировались и разрабатывались так, чтобы программист мог на­ чать процесс и, базируясь на его результатах, решить, какое именно действие требует­ ся выполнить, либо повторять действие до тех пор, пока удовлетворяется некоторое условие, создавая логические пути и циклы. Значения хранятся в переменных, кото­ рые могут использоваться и изменяться любым количеством команд. Это дает возмож­

ность выдавать пользователям приглашение для ввода значений или для чтения их из

файла, форматировать выходные данные подходящим образом (например, преобразо­ вывать числовые данные в диаграммы).

280

Что включается во встроен11ый SQL?

Назначение встроенного SQL - комбинировать эти возможности языка программи­ рования, давая возможность разрабатывать сложные процедурные программы, которые обращаются к базе данных через SQL, скрывая от пользователя сложности работы с таб­ лицами в процедурном языке, не ориентированном на работу с такими струкrурами дан­

ных, но имеющем мощные управляющие струкrуры.

Как встраивается SQL?

Команды SQL размещаются в основном тексте программы на языке высокого уровня, им предшествует фраза ЕХЕС SQL (аббревиатура от EXECute SQL - вы­ полнить SQL). Это позволят включить команды, специфичные для встроенной формы SQL. Строго говоря, стандарт ANSI не поддерживает встроенного SQL как такового, а поддерживает модуль (module}, который рассматривается как множест­ во процедур SQL, вызывае.л1ых из другого языка программирования, но не встро­ енных в него. Определение официального синтаксиса встроенного SQL, включающего расширенный официальный синтаксис для каждого языка, в который SQL должен быть встроен, - длительная и неблагодарная работа, которую стара­ ется избегать ANSI. Но он предоставляет четыре приложения (не являющиеся ча­ стью стандарта), определяющие синтаксис расширенного SQL для четырех языков: COBOL, Pascal, FORTRAN, PL/I. Могут использоваться язык С и другие языки про­

граммирования.

Когда команды SQL встраиваются в текст программы, написанной на каком-либо язы­ ке программирования, необходимо выполнить предкомnW1Яцию (precompile) программы перед выполнением ее компиляции. Программа, названная предкоJ1mwzятором) или пре­ процессоро.м - (p1·ecompiler или p1·eprocess01), просматривает текст вашей программы и преобразует команды SQL в форму, совместимую с основным языком программирования. Затем, как обычно, применяется компилятор дщI преобразования программы из основно­ го кода в выполняемый.

В соответствии с методом модульного языка программирования, определенного в

ANSI, основная программа осуществляет вызовы SQL-процедур. Эти процедуры принимают значения параметров и возвращают их в основную (вызвавшую их) про­ грамму. Модуль может содержать любое количество процедур, каждая из которых состоит из единственной команды SQL. Основная идея заключается в одинаковом функционировании этих программ независимо от языка программирования, в кото­ рый они встроены (из которого они вызваны) (хотя модуль должен также идентифи­

цировать включающий язык из-за различий в типах данных для разных языков

программирования).

Конкретные реализации отличаются от стандарта встроенного SQL тем, что моду­ ли могут непосредственно определяться в тексте программы. В общем случае препро­ цессор создает модуль, называемый модупем доступа (access module). Для данной программы может существовать только один модуль, содержащий любое количество SQL-процедур. Размещение SQL-предложения непосредственно в коде включающего языка проще и более практично, чем непосредственное создание самих модулей.

281

Источник: https://studfile.net/preview/16418473/