SELECT owner, tname, cname
FROM SYSTEMCOLAUTH
WHERE refauth IN ('Y', 'G')
AND username=USER
ORDER BY 1, 2;
который показывает, что эти две таблицы, которые имеют различных владельцев, но одинаковые имя, в действительности, совершенно разные таблицы (т.е. это не как два синонима для одной таблицы ).
SQL Execution Log
SELECT OWNER, TNAME, CNAME FROM SYSTEMCOLAUTH
WHERE refaulth IN ('Y', 'G' ) AND username=USER
ORDER BY 1, 2;
owner
|
tname
|
cname
|
Diane
|
Customers
|
cnum
|
Diane
|
Salespeople
|
sname
|
Diane
|
Salespeople
|
sname
|
Gillan
|
Customers
|
cnum
|
Таблица 24. 7: Столбцы в пользователь имеет привилегию INSERT
SYSTEMSYNONS - СИНОНИМЫ ДЛЯ ТАБЛИЦ В БАЗЕ ДАННЫХ
Это - имена столбцов в таблице SYSTEMSYNONS и их описание:
СТОЛБЕЦ
|
ОПИСАНИЕ
|
synonym
|
Имя синонима
|
synowner
|
Пользователь, который является владельцем синонима (может быть PUBLIC (ОБЩИЙ))
|
tname
|
Имя таблицы используемой владельцем
|
tabowner
|
Имя пользователя который является владельцем таблицы
|
ТИПОВОЙ ЗАПРОС. Предположим, что Adrian имеет синоним Clients для таблицы Заказчиков принадлежащей Diane, и что имеется общий синоним Customers для этой же таблицы. Вы делаете запрос таблицы для всех синонимов в таблице Заказчиков (вывод показывается в Таблице 24.8 ):
SELECT *
FROM SYSTEMSYNONS
WHERE tname='Customers'
SQL Execution Log
SELECT * FROM SYSTEMSYNONS
WHERE tname='Customers';
synonym
|
synowner
|
tname
|
tabowner
|
Clients
|
Adrian
|
Customers
|
Diane
|
Customers
|
PUBLIC
|
Customers
|
Diane
|
Таблица 24.8: Синонимы для таблицы Заказчиков
ДРУГОЕ ИСПОЛЬЗОВАНИЕ КАТАЛОГА
Конечно, вы можете выполнять более сложные запросы в системном каталоге. Обьединения, например, могут быть очень удобны. Эта команда позволит вам увидеть столбцы таблиц и базовые индексы установленые для каждого, (вывод показывается в Таблице 24.9 ):
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.
SQL Execution Log
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;
tname
|
cname
|
iname
|
cposition
|
Salespeople
|
sname
|
salesno
|
1
|
Customers
|
cnum
|
custsale
|
2
|
Customers
|
snum
|
custsale
|
1
|
Таблица 24.9 Столбцы и их индексы
Подзапросы также могут быть использованы. Имеется способ увидеть данные столбца только для столбцов из таблиц каталога:
SELECT *
FROM SYSTEMCOLUMNS
WHERE tname IN
( SELECT tname
FROM SYSTEMCATALOG);
Для простоты, мы не будем показывать вывод этой команды, которая состоит из одного входа для каждого столбца каждой таблицы каталога.
Вы могли бы поместить этот запрос в представление, назвав его, например, SYSTEMTABCOLS, для представления SYSTEMTABLES.
РЕЗЮМЕ
Итак, система SQL использует набор таблиц, называемый ситемным каталогом в структуре базы данных. Эти таблицы могут запрашиваться но модифицироваться. Кроме того, вы можете добавлять комментарии столбцов в (и удалять их из) таблицы SYSTEMCATALOG и SYSTEMCOLUMNS.
Создание представлений в этих таблицах - превосходный способ точно определить, какая пользовательская информация может быть доступной.
Теперь, когда вы узнали о каталоге, вы завершили ваше обучение SQL в диалоговом режиме. Следующая глава этой книги расскажет вам как SQL используется в программах которые написаны прежде всего на других языках но которые способны извлечь пользу из возможностей SQL, взаимодействуя с его таблицами базы данных.
РАБОТА С SQL
* Сделайте запрос каталога чтобы вывести, для каждой таблицы имеющей более чем четыре столбца, имя таблицы, имя владелеца, а также имя столбцов и тип данных этих столбцов.
Читать дальше