Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по SQL.DOC
Скачиваний:
205
Добавлен:
01.05.2014
Размер:
1.16 Mб
Скачать

Insauth Имеет ли пользователь привилегию insert

delauth Имеет ли пользователь привилегию DELETE

Возможные значения для каждой из перечисленных привилегий объекта

( имена столбцов которых заканчиваются на auth ) - Y, N, и G. G указывает, что пользователь имеет привилегию с возможностью передачи привилегий. В каждой строке, по крайней мере один из этих столбцов должен иметь состояние, отличное от N (другими словами, иметь хоть какую-то привилегию ).

Первые четыре столбца этой таблицы составляют первичный ключ. Это

означает, что каждая комбинация из tname, владелец-пользователь ( не забудьте, что две различные таблицы с различными владельцами могут иметь одно и тоже имя ), пользователь и пользователь, передающий права ( гарантор ), должна быть уникальной. Каждая строка этой таблицы содержит все привилегии ( которые не являются определенным столбцом ), предоставляются одним определенным пользователем другому определенному пользователю в конкретном объекте.

UPDATE и REFERENCES являются привилегиями, которые могут быть определенными столбцами, и находиться в различных таблицах каталога. Если пользователь получает привилегии в таблице от более чем одного пользователя, такие привилегии могут быть отдельными строками созданными в этой таблице. Это необходимо для каскадного отслеживания при вызове привилегий.

SYSTEMCOLAUTH

Имена столбцов для SYSTEMCOLAUTH и их описание следующие:

username Пользователь который имеет привилегии

grantor Пользователь который предоставляет привилегии

другому пользователю

tname Имя таблицы в которой существуют привилегии

cname Имя столбца в котором существуют привилегии

owner Владелец tname

updauth Имеет ли пользователь привилегию UPDATE в этом

столбце

refauth Имеет ли пользователь привилегию REFERENCES в

этом столбце

Столбцы updauth и refauth могут быть в состоянии Y, N, или G; но не могут

быть одновременно в состоянии N для одной и той же строки.

Первые пять столбцов таблицы составляют первичный ключ. Он отличается от первичного ключа SYSTEMTABAUTH, в котором содержится поле cname, указывающее на определенный столбец обсуждаемой таблицы, для которой применяются одна или обе привилегии. Отдельная строка в этой таблице может существовать для каждого столбца в любой данной таблице, в которой одному пользователю передаются привилегии определенного столбца с помощью другого пользователя.

Как и в случае с SYSTEMTABAUTH та же привилегия может быть описана более чем в одной строке этой таблицы, если она была передана более чем одним пользователем.

SYSTEMSYNONS - СИНОНИМЫ ДЛЯ ТАБЛИЦ В БАЗЕ ДАННЫХ

Имена столбцов в таблице SYSTEMSYNONS и их описание:

synonym Имя синонима

synowner Пользователь, который является владельцем

синонима ( может быть PUBLIC (ОБЩИЙ))

tname Имя таблицы, используемой владельцем

tabowner Имя пользователя, который является владельцем таблицы

ДРУГОЕ ИСПОЛЬЗОВАНИЕ КАТАЛОГА

Конечно, вы можете выполнять более сложные запросы в системном каталоге.

Обьединения, например, могут быть очень удобны. Эта команда позволит вам

увидеть столбцы таблиц и базовые индексы:

SELECT a.tname, a.cname, iname, cposition

FROM SYSTEMCOLUMNS a, SYSTEMINDEXES b

WHERE a.tabowner = b. tabowner AND a.tname = b.tname

AND a.cnumber = b.cnumber

ORDER BY 3 DESC, 2;

Она показывает два индекса, один для таблицы Заказчиков и один для таблицы Продавцов. Последний из них - это одностолбцовый индекс с именем salesno в поле snum; он был помещен первым из-за сортировки по убыванию ( в обратном алфавитном порядке ) в столбце iname. Другой индекс, custsale, используется продавцами, чтобы отыскивать своих заказчиков. Он основывается на комбинации полей snum и cnum внутри таблицы Заказчиков, с полем snum

приходящим в индексе первым, как это и показано с помощью поля cposition.

Лекция 15

ЧТО ТАКОЕ - ВЛОЖЕННЫЙ SQL

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

ЗАЧЕМ ВКЛАДЫВАТЬ SQL?

Хотя и мы потратили некоторое время на то чтобы показать что умеет делать SQL , но если вы опытный программист, вы вероятно отметили, что сам по себе, он не очень полезен при написании программ.

Самое очевидное ограничение - это то, что интерактивный SQL в основном выполняет по одной команде в каждый момент времени.

Типы логических конструкций типа if ... then ( "если ... то" ), for ... do

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

Более традиционные языки, однако, сильны именно в этих областях.

Они разработаны так, чтобы программист мог начинать обработку данных,

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

Цель вложенного SQL состоит в том, чтобы объединить эти возможности,

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

обрабатывают базу данных посредством SQL, который ориентирован на табличную структуру данных.

КАК ДЕЛАЮТСЯ ВЛОЖЕНИЯ SQL.

Команды SQL помещаются в текст главной программы и им

предшествует фраза EXEC SQL ( EXECute SQL ).

Строго говоря, стандарт ANSI не поддерживает вложенный SQL как таковой. Он поддерживает понятие, называемое модуль, который более точно,

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

расширение официального синтаксиса каждого языка, в который может вкладываться SQL, что весьма долгая и неблагодарная задача, которую ANSI

избегает. Однако, ANSI обеспечивает четыре приложения ( не являющиеся

частью стандарта ), которые определяют синтаксис вложения SQL для четырех языков: КОБОЛ, ПАСКАЛЬ, ФОРТРАН, и ПЛ/1.

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

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

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

которых состоит из одиночной команды SQL. Идея в том, чтобы процедуры

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

язык из-за различий в типах данных различных языков ).

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

прекомпилятор будет создавать модуль, называемый модулем доступа. Только

один модуль, содержащий любое число процедур SQL, может существовать

для данной программы. Размещение операторов SQL непосредственно в главном коде, происходит более просто и более практично чем непосредственно

создание самих модулей.

Каждая из программ, использующих вложение SQL, связана с ID доступа,

во время ее выполнения. ID доступа, связанный с программой, должен иметь

все привилегии, чтобы выполнять операции SQL, выполняемые в программе.

Вообще-то вложенная программа SQL регистрируется в базе данных, также

как и пользователь, выполняющий программу. Более подробно, это определяет проектировщик, но вероятно было бы неплохо включить в вашу программу команду CONNECT или ей подобную.

ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННЫХ

======= ОСНОВНОГО ЯЗЫКА В SQL =======

Основной способ, которым SQL и части базового языка ваших программ будут связываться друг с другом, - это с помощью значений переменных.

Естественно, что разные языки распознают различные типы данных для переменных. ANSI определяет эквиваленты SQL для четыре базовых языков:

ПЛ/1, Паскаль, КОБОЛ, и ФОРТРАН. Эквиваленты для других языков - определяет проектировщик.

Имейте в виду, что типы, такие как DATE, не распознаются ANSI; и

следовательно никаких эквивалентных типов данных для базовых языков,

не существует в стандарте ANSI. Более сложные типы данных базового

языка, такие как матрицы, не имеют эквивалентов в SQL.

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

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

команде. Главные переменные должны

* быть обьявленными в SQL DECLARE SESSION ( РАЗДЕЛ

ОБЪЯВЛЕНИЙ ), который будет описан далее.

* иметь совместимый тип данных с их функциями в команде SQL

( например, числовой тип, если они вставляется в числовое поле )

* быть назначенными значению во время их использования в команде

SQL, если команда SQL самостоятельно не может сделать назначение.

* иметь предшествуещее двоеточие (:), когда они упоминаются в команде SQL

Так как главные переменные отличаются от имен столбцов SQL наличием

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

именами, что и ваши столбцы, если это конечно нужно.

Предположим что вы имеете четыре переменных в вашей программе с

именами: id_num, salesperson, loc, и comm. Они содержат значения,

которые вы хотите вставить в таблицу Продавцов. Вы могли бы вложить

следующую команду SQL в вашу программу:

EXEC SQL INSERT INTO Salespeople

Соседние файлы в предмете Базы данных