|
| ||||||||||||
| ||||||||||||
3.12. Прямой вызов операторов SQLКак мы уже упоминали, в стандарте SQL/92 специфицирован набор операторов, которые могут вызываться напрямую не будучи встроены в модуль или программу на языке программирования. Обычно прямой вызов производится с помощью некоторой утилиты СУБД, обеспечивающей возможности интерактивного ввода и редактирования SQL-операторов и отображение результатов на экран терминала. Наиболее естественным способом написания такой утилиты является использование динамического SQL. Набор прямо вызываемых операторов определяется следующими синтаксическими правилами:
<direct SQL statement> ::=
<directly executable statement> <semicolon>
<directly executable statement> ::=
<direct SQL data statement>
| <SQL schema statement>
| <SQL transaction statement>
| <SQL connection statement>
| <SQL session statement>
| <direct implementation-defined statement>
<direct SQL data statement> ::=
<delete statement: searched>
| <direct select statement: multiple rows>
| <insert statement>
| <update statement: searched>
| <temporary table declaration>
<direct implementation-defined statement> ::= См. пояснения ниже
Пояснения:
Как видно из синтаксических правил, определяющих набор прямых операторов SQL, в состав этого набора входит специальный оператор выборки, не употребляемый в других контекстах и потому не рассмотренный нами ранее. Синтаксис этого оператора следующий:
<direct select statement: multiple rows> ::=
<query expression> [ <order by clause> ]
Пояснения:
3.13. Информационная схема и каталоги базы данныхИнформационная схема (InformationSchema) содержит описание структуры базы данных в виде набора представлений, определенных над базовыми таблицами, которые в свою очередь определены в отдельной схеме определений (DefinitionSchema). Единственное назначение схемы определений состоит в том, чтобы обеспечить модель для поддержки информационной схемы и облегчить ее понимание. От реализации требуется не более того, как моделировать существование схемы определений, чтобы можно было поддерживать представления информационной схемы. Таблицы информационной схемы определяются как содержащиеся в схеме с именем INFORMATION_SCHEMA. Эти таблицы доступны пользователям как любые другие таблицы в любой другой схеме. Привилегия SELECT для всех этих представлений предоставлена PUBLIC с правом передачи привилегии. В результате любой пользователь может адресовать представлениям информационной схемы свои запросы и разрешать или запрещать другим пользователям доступ к представлениям, определенным на основе представлений информационной схемы. Другие привилегии на эти представления не передаются, поэтому пользователи не могут выполнять над ними операции обновления. Кроме того, информационная схема содержит определения ряда доменов, использование которых с правом передачи привилегии на использование доступно всем пользователям. В реализации могут определяться дополнительные объекты информационной схемы, а также к определенным с стандарте представлениям могут добавляться столбцы. Базовые таблицы, на которых основаны представления информационной схемы, определяются как содержащиеся в схеме с именем DEFINITION_SCHEMA. К объектам схемы определений нельзя адресовать операторы SQL. Поэтому в этом разделе мы перечислим и кратко поясним только объекты информационной схемы. Этого достаточно для того, чтобы оценить стандартность реализации. 3.13.1. Информационная схема Определение информационной схемы выглядит следующим образом:
CREATE SCHEMA INFORMATION_SCHEMA
AUTHORIZATION INFORMATION_SCHEMA
3.13.2. Базовая таблица INFORMATION_SCHEMA_CATALOG_NAME Эта таблица специфицирует каталог информационной схемы. Таблица определяется следующим образом:
CREATE TABLE INFORMATION_SCHEMA_CATALOG_NAME
(CATALOG_NAME
SQL_IDENTIFIER,
CONSTRAINT INFORMATION_SCHEMA_CATALOG_NAME_PRIMARY_KEY
PRIMARY KEY (CATALOG_NAME))
Пояснения:
CREATE ASSERTION INFORMATION_SCHEMA_CATALOG_NAME_CARDINALITY
CHECK (1 = (SELECT COUNT(*)
FROM INFORMATION_SCHEMA_CATALOG_NAME))
3.13.3. Представление SCHEMATAview Это представление идентифицирует схемы, принадлежащие данному пользователю. Определение представления:
CREATE VIEW SCHEMATA
AS SELECT CATALOG_NAME, SCHEMA_NAME, SCHEMA_OWNER,
DEFAULT_CHARACTER_SET_CATALOG, DEFAULT_CHARACTER_SET_SCHEMA,
DEFAULT_CHARACTER_SET_NAME
FROM DEFINITION_SCHEMA.SCHEMATA
WHERE SCHEMA_OWNER = CURRENT_USER
AND CATALOG_NAME = (
SELECT CATALOG_NAME FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.4. Представление DOMAINS Представление идентифицирует домены в данном каталоге, доступные данному пользователю. Представление определяется следующим образом:
CREATE VIEW DOMAINS
AS SELECT DISTINCT DOMAIN_CATALOG, DOMAIN_SCHEMA,
DOMAIN_NAME,
DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH,
COLLATION_CATALOG, COLLATION_SCHEMA,COLLATION_NAME,
CHARACTER_SET_CATALOG, CHARACTER_SET_SCHEMA,
CHARACTER_SET_NAME, NUMERIC_PRECISION,
NUMERIC_PRECISION_RADIX,
NUMERIC_SCALE, DATETIME_PRECISION, DOMAIN_DEFAULT
FROM DEFINITION_SCHEMA.DOMAINS
JOIN
DEFINITION_SCHEMA.DATA_TYPE_DESCRIPTOR AS D
LEFT JOIN DEFINITION_SCHEMA.COLLATIONS AS S
USING (COLLATION_CATALOG, COLLATION_SCHEMA,
COLLATION_NAME)
ON
((DOMAIN_CATALOG, DOMAIN_SCHEMA, DOMAIN_NAME, '')
= (TABLE_OR_DOMAIN_CATALOG, TABLE_OR_DOMAIN_SCHEMA,
TABLE_OR_DOMAIN_NAME, COLUMN_NAME))
WHERE
((DOMAIN_CATALOG, DOMAIN_SCHEMA, DOMAIN_NAME, 'DOMAIN')
IN
(SELECT OBJECT_CATALOG, OBJECT_SCHEMA, OBJECT_NAME,
OBJECT_TYPE
FROM DEFINITION_SCHEMA.USAGE_PRIVILEGES
WHERE GRANTEE IN ('PUBLIC', CURRENT_USER))
OR
(DOMAIN_CATALOG, DOMAIN_SCHEMA, DOMAIN_NAME)
IN
(SELECT DOMAIN_CATALOG, DOMAIN_SCHEMA, DOMAIN_NAME
FROM COLUMNS))
AND
DOMAIN_CATALOG
=
(SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.5. Представление DOMAIN_CONSTRAINTS Это представление идентифицирует ограничения доменов в данном каталоге, доступных данному пользователю. Определение представления:
CREATE VIEW DOMAIN_CONSTRAINTS
AS SELECT DISTINCT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA,
CONSTRAINT_NAME, DOMAIN_CATALOG, DOMAIN_SCHEMA, DOMAIN_NAME,
IS_DEFERRABLE, INITIALLY_DEFERRED
FROM DEFINITION_SCHEMA.DOMAIN_CONSTRAINTS
JOIN
DEFINITION_SCHEMA.SCHEMATA AS S
ON
((CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA)
= (S.CATALOG_NAME, SCHEMA_NAME S))
WHERE
SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG
= (SELECT CATALOG_NAME FROM
INFORMATION_SCHEMA_CATALOG_NAME)
3.13.6. Представление TABLES Представление идентифицирует таблицы, определенные в данном каталоге и доступные данному пользователю. Представление определяется следующим образом:
CREATE VIEW TABLES
AS SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
TABLE_TYPE
FROM DEFINITION_SCHEMA.TABLES
WHERE (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME)
IN
(SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME
FROM DEFINITION_SCHEMA.TABLE_PRIVILEGES
WHERE GRANTEE IN ('PUBLIC', CURRENT_USER)
UNION
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME
FROM DEFINITION_SCHEMA.COLUMN_PRIVILEGES
WHERE GRANTEE IN ('PUBLIC', CURRENT_USER))
AND TABLE_CATALOG
= (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.7. Представление VIEWS Представление идентифицирует представляемые таблицы, определенные в данном каталоге и доступные данному пользователю. Определение представления:
CREATE VIEW VIEWS
AS SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
CASE WHEN (TABLE_CATALOG, TABLE_SCHEMA, CURRENT_USER)
IN (SELECT CATALOG_NAME, SCHEMA_NAME, SCHEMA_OWNER
FROM DEFINITION_SCHEMA.SCHEMATA)
THEN VIEW_DEFINITION
ELSE NULL END AS VIEW_DEFINITION,
CHECK_OPTION, IS_UPDATABLE
FROM DEFINITION_SCHEMA.VIEWS
WHERE (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME)
IN (SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME
FROM TABLES)
AND TABLE_CATALOG
= (SELECT CATALOG_NAMEFROM
INFORMATION_SCHEMA_CATALOG_NAME)
3.13.8. Представление COLUMNS Представление идентифицирует столбцы таблиц, определенных в данном каталоге и доступных данному пользователю. Представление определяется следующим образом:
CREATE VIEW COLUMNS
AS SELECT DISTINCT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
C.COLUMN_NAME, ORDINAL_POSITION,
CASE WHEN EXISTS (SELECT *
FROM DEFINITION_SCHEMA.SCHEMATA AS S
WHERE (TABLE_CATALOG, TABLE_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME)
AND SCHEMA_OWNER = USER)
THEN COLUMN_DEFAULT
ELSE NULL
END AS COLUMN_DEFAULT,
IS_NULLABLE,
COALESCE (D1.DATA_TYPE, D2.DATA_TYPE) AS DATA_TYPE,
LESCE (D1.CHARACTER_MAXIMUM_LENGTH,
D2.CHARACTER_MAXIMUM_LENGTH)
AS CHARACTER_MAXIMUM_LENGTH,
COALESCE (D1.CHARACTER_OCTET_LENGTH,
D2.CHARACTER_OCTET_LENGTH)
AS CHARACTER_OCTET_LENGTH,
COALESCE (D1.NUMERIC_PRECISION,
D2.NUMERIC_PRECISION)
AS NUMERIC_PRECISION,
COALESCE (D1.NUMERIC_PRECISION_RADIX,
D2.NUMERIC_PRECISION_RADIX)
AS NUMERIC_PRECISION_RADIX,
COALESCE (D1.NUMERIC_SCALE, D2.NUMERIC_SCALE)
AS NUMERIC_SCALE,
COALESCE (D1.DATETIME_PRECISION, D2.DATETIME_PRECISION)
AS DATETIME_PRECISION,
COALESCE (C1.CHARACTER_SET_CATALOG,
C2.CHARACTER_SET_CATALOG)
AS CHARACTER_SET_CATALOG,
COALESCE (C1.CHARACTER_SET_SCHEMA,
C2.CHARACTER_SET_SCHEMA)
AS CHARACTER_SET_SCHEMA,
COALESCE (C1.CHARACTER_SET_NAME,
C2.CHARACTER_SET_NAME)
AS CHARACTER_SET_NAME,
COALESCE (D1.COLLATION_CATALOG, D2.COLLATION_CATALOG)
AS COLLATION_CATALOG,
COALESCE (D1.COLLATION_SCHEMA, D2.COLLATION_SCHEMA)
AS COLLATION_SCHEMA,
COALESCE (D1.COLLATION_NAME, D2.COLLATION_NAME)
AS COLLATION_NAME,
DOMAIN_CATALOG, DOMAIN_SCHEMA, DOMAIN_NAME
FROM DEFINITION_SCHEMA.COLUMNS AS C
LEFT JOIN
DEFINITION_SCHEMA.DATA_TYPE_DESCRIPTOR AS D1
LEFT JOIN
DEFINITION_SCHEMA.COLLATIONS AS C1
ON
((C1.COLLATION_CATALOG, C1.COLLATION_SCHEMA,
C1.COLLATION_NAME)
= (D1.COLLATION_CATALOG, D1.COLLATION_SCHEMA,
D1.COLLATION_NAME))
ON
((C.TABLE_CATALOG, C.TABLE_SCHEMA, C.TABLE_NAME,
C.COLUMN_NAME)
= (D1.TABLE_OR_DOMAIN_CATALOG, D1.TABLE_OR_DOMAIN_SCHEMA,
D1.TABLE_OR_DOMAIN_NAME, D1.COLUMN_NAME))
LEFT JOIN
DEFINITION_SCHEMA.DATA_TYPE_DESCRIPTOR AS D2
LEFT JOIN
DEFINITION_SCHEMA.COLLATIONS AS C2
ON
((C2.COLLATION_CATALOG, C2.COLLATION_SCHEMA,
C2.COLLATION_NAME)
= (D2.COLLATION_CATALOG, D2.COLLATION_SCHEMA,
D2.COLLATION_NAME))
ON
((C.DOMAIN_CATALOG, C.DOMAIN_SCHEMA, C.DOMAIN_NAME)
= (D2.TABLE_OR_DOMAIN_CATALOG, D2.TABLE_OR_DOMAIN_SCHEMA,
D2.TABLE_OR_DOMAIN_NAME))
WHERE (C.TABLE_CATALOG, C.TABLE_SCHEMA, C.TABLE_NAME,
C.COLUMN_NAME)
IN
(SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
COLUMN_NAME
FROM DEFINITION_SCHEMA.COLUMN_PRIVILEGES
WHERE GRANTEE IN ('PUBLIC', CURRENT_USER))
AND C.TABLE_CATALOG
= (SELECT CATALOG_NAME
FROM
INFORMATION_SCHEMA_CATALOG_NAME)
3.13.9. Представление TABLE_PRIVILEGES Представление идентифицирует привилегии для таблиц, определенных в данном каталоге, которые доступны данному пользователю или переданы им. Определение представления:
CREATE VIEW TABLE_PRIVILEGES
AS SELECT GRANTOR, GRANTEE, TABLE_CATALOG, TABLE_SCHEMA,
ABLE_NAME, PRIVILEGE_TYPE, IS_GRANTABLE
FROM DEFINITION_SCHEMA.TABLE_PRIVILEGES
WHERE GRANTEE IN ('PUBLIC', CURRENT_USER)
OR GRANTOR = CURRENT_USER
AND TABLE_CATALOG
= (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.10. Представление COLUMN_PRIVILEGES Это представление идентифицирует привилегии для столбцов таблиц, определенных в данном каталоге, которые доступны данному пользователю или переданы им. Представление определяется следующим образом:
CREATE VIEW COLUMN_PRIVILEGES
AS SELECT GRANTOR, GRANTEE, TABLE_CATALOG, TABLE_SCHEMA,
TABLE_NAME, COLUMN_NAME, PRIVILEGE_TYPE, IS_GRANTABLE
FROM DEFINITION_SCHEMA.COLUMN_PRIVILEGES
WHERE GRANTEE IN ('PUBLIC', CURRENT_USER)
OR GRANTOR = CURRENT_USER
AND TABLE_CATALOG
= (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.11. Представление USAGE_PRIVILEGES Представление идентифицирует привилегии USAGE для объектов, определенных в данном каталоге, которые доступны данному пользователю или переданы им. Определение представления:
CREATE VIEW USAGE_PRIVILEGES
AS SELECT GRANTOR, GRANTEE, OBJECT_CATALOG, OBJECT_SCHEMA,
OBJECT_NAME, OBJECT_TYPE, 'USAGE' AS PRIVILEGE_TYPE,
IS_GRANTABLE
FROM DEFINITION_SCHEMA.USAGE_PRIVILEGES
WHERE GRANTEE IN ('PUBLIC', CURRENT_USER)
OR GRANTOR = CURRENT_USER
AND OBJECT_CATALOG
= (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.12. Представление TABLE_CONSTRAINTS Представление идентифицирует табличные ограничения, определенные в данном каталоге и принадлежащие данному пользователю. Представление определяется следующим образом:
CREATE VIEW TABLE_CONSTRAINTS
AS SELECT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA,
CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA,
TABLE_NAME, CONSTRAINT_TYPE, IS_DEFERRABLE,
INITIALLY_DEFERRED
FROM DEFINITION_SCHEMA.TABLE_CONSTRAINTS
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON
((CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG
= (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.13. Представление REFERENTIAL_CONSTRAINTS Это представление идентифицирует ссылочные ограничения, определенные в данном каталоге и принадлежащие данному пользователю. Определение представления:
CREATE VIEW REFERENTIAL_CONSTRAINTS
AS SELECT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA,
CONSTRAINT_NAME, UNIQUE_CONSTRAINT_CATALOG,
UNIQUE_CONSTRAINT_SCHEMA, UNIQUE_CONSTRAINT_NAME,
MATCH_OPTION, UPDATE_RULE, DELETE_RULE
FROM DEFINITION_SCHEMA.REFERENTIAL_CONSTRAINTS
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON ((CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG
= (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.14. Представление CHECK_CONSTRAINTS Представление идентифицирует проверочные ограничения, определенные в данном каталоге и принадлежащие данному пользователю. Определение представления:
CREATE VIEW CHECK_CONSTRAINTS
AS SELECT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA,
CONSTRAINT_NAME, CHECK_CLAUSE
FROM DEFINITION_SCHEMA.CHECK_CONSTRAINTS
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON ((CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG
= (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.15. Представление KEY_COLUMN_USAGE Это представление идентифицирует столбцы, определенные в данном каталоге и объявленные ключевыми данным пользователем. Представление определяется следующим образом:
CREATE VIEW KEY_COLUMN_USAGE
AS SELECT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA,
CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA,
TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION
FROM DEFINITION_SCHEMA.KEY_COLUMN_USAGE
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON ((CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.16. Представление ASSERTIONS Представление идентифицирует утверждения целостности, определенные в данном каталоге и принадлежащие данному пользователю. Определение представления:
CREATE VIEW ASSERTIONS
AS SELECT CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA,
CONSTRAINT_NAME, IS_DEFERRABLE, INITIALLY_DEFERRED
FROM DEFINITION_SCHEMA.ASSERTIONS
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON ((CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.17. Представление CHARACTER_SETS Это представление идентифицирует наборы символов, определенные в данном каталоге и доступные данному пользователю:
CREATE VIEW CHARACTER_SETS
AS SELECT CHARACTER_SET_CATALOG, CHARACTER_SET_SCHEMA,
CHARACTER_SET_NAME, FORM_OF_USE, NUMBER_OF_CHARACTERS,
DEFAULT_COLLATE_CATALOG, DEFAULT_COLLATE_SCHEMA,
DEFAULT_COLLATE_NAME FROM DEFINITION_SCHEMA.CHARACTER_SETS
WHERE (CHARACTER_SET_CATALOG, CHARACTER_SET_SCHEMA,
CHARACTER_SET_NAME, 'CHARACTER SET')
IN
(SELECT OBJECT_CATALOG, OBJECT_SCHEMA,
OBJECT_NAME, OBJECT_TYPE
FROM DEFINITION_SCHEMA.USAGE_PRIVILEGES
WHERE GRANTEE
IN ('PUBLIC', CURRENT_USER))
AND CHARACTER_SET_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
Далее мы пропустим определения двух представлений - COLLATIONS и TRANSLATIONS, поскольку соответствующие понятия не рассматривались в курсе и смысл этих представлений все равно будет непонятен (как мы отмечали, вообще понятия, связанные с использованием национальных наборов символов, трудно использовать обычным пользователям). 3.13.18. Представление VIEW_TABLE_USAGE Это представление идентифицирует таблицы, от которых зависят представляемые таблицы, определенные в данном каталоге и принадлежащие данному пользователю. Определение представления:
CREATE VIEW VIEW_TABLE_USAGE
AS SELECT VIEW_CATALOG, VIEW_SCHEMA, VIEW_NAME,
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME
FROM DEFINITION_SCHEMA.VIEW_TABLE_USAGE
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON ((TABLE_CATALOG, TABLE_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND VIEW_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.19. Представление VIEW_COLUMN_USAGE Представление идентифицирует столбцы, от которых зависят представления, определенные в данном каталоге и принадлежащие данному пользователю. Определение представления:
CREATE VIEW VIEW_COLUMN_USAGE
AS SELECT VIEW_CATALOG, VIEW_SCHEMA, VIEW_NAME,
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
COLUMN_NAME FROM DEFINITION_SCHEMA.VIEW_COLUMN_USAGE
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON ((TABLE_CATALOG, TABLE_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND VIEW_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.20. Представление CONSTRAINT_TABLE_USAGE Это представление идентифицирует таблицы, используемые в ссылочных ограничениях, ограничениях уникальности, проверочных ограничениях и утверждениях целостности, которые определены в данном каталоге и принадлежат данному пользователю. Определение представления: CREATE VIEW CONSTRAINT_TABLE_USAGE
AS SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME
FROM ((SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME
FROM DEFINITION_SCHEMA.CHECK_COLUMN_USAGE)
UNION
(SELECT PK.TABLE_CATALOG, PK.TABLE_SCHEMA, PK.TABLE_NAME,
FK.CONSTRAINT_CATALOG, FK.CONSTRAINT_SCHEMA, FK.CONSTRAINT_NAME
FROM DEFINITION_SCHEMA.REFERENTIAL_CONSTRAINTS
AS FK JOIN DEFINITION_SCHEMA.TABLE_CONSTRAINTS
AS PK ON
(FK.UNIQUE_CONSTRAINT_CATALOG, FK.UNIQUE_CONSTRAINT_SCHEMA,
FK.UNIQUE_CONSTRAINT_NAME)
= (PK.CONSTRAINT_CATALOG, PK.CONSTRAINT_SCHEMA, PK.CONSTRAINT_NAME)))
JOIN
DEFINITION_SCHEMA.SCHEMATA S
ON ((TABLE_CATALOG, TABLE_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
WHERE S.SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.21. Представление CONSTRAINT_COLUMN_USAGE Представление идентифицирует столбцы, используемые в ссылочных ограничениях, ограничениях уникальности, проверочных ограничениях и утверждениях целостности, которые определены в данном каталоге и принадлежат данному пользователю. Определение представления:
CREATE VIEW CONSTRAINT_COLUMN_USAGE
AS SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
COLUMN_NAME, CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME
FROM ((SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
COLUMN_NAME, CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME
FROM DEFINITION_SCHEMA.CHECK_COLUMN_USAGE)
UNION (SELECT K.TABLE_CATALOG, K.TABLE_SCHEMA, K.TABLE_NAME,
K.COLUMN_NAME, CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME
FROM DEFINITION_SCHEMA.TABLE_CONSTRAINTS
JOIN
DEFINITION_SCHEMA.KEY_COLUMN_USAGE
AS K USING (CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME))
JOIN
DEFINITION_SCHEMA.SCHEMATA
ON ((TABLE_CATALOG, TABLE_SCHEMA)
= (CATALOG_NAME, SCHEMA_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER
AND CONSTRAINT_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.22. Представление COLUMN_DOMAIN_USAGE Представление идентифицирует столбцы, определенные в данном каталоге, которые зависят от домена, определенного в этом же каталоге, и принадлежат данному пользователю. Определение представления выглядит следующим образом:
CREATE VIEW COLUMN_DOMAIN_USAGE
AS SELECT D.DOMAIN_CATALOG, D.DOMAIN_SCHEMA, D.DOMAIN_NAME,
TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME
FROM DEFINITION_SCHEMA.COLUMNS C
JOIN
DEFINITION_SCHEMA.DOMAINS D JOIN DEFINITION_SCHEMA.SCHEMATA S
ON ((DOMAIN_CATALOG, DOMAIN_SCHEMA)
= (S.CATALOG_NAME, S.SCHEMA_NAME))
ON ((D.DOMAIN_CATALOG, D.DOMAIN_SCHEMA, D.DOMAIN_NAME)
= (C.DOMAIN_CATALOG, C.DOMAIN_SCHEMA, C.DOMAIN_NAME))
WHERE SCHEMA_OWNER = CURRENT_USER AND C.DOMAIN_NAME IS NOT NULL
AND D.DOMAIN_CATALOG = (SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME)
3.13.23. Представление SQL_LANGUAGES Это представление идентифицирует уровни соответствия, опции и диалекты, поддерживаемые реализацией SQL, обрабатывающей данные, которые определены в данном каталоге. Представление определяется следующим образом:
CREATE VIEW SQL_LANGUAGES
AS SELECT SQL_LANGUAGE_SOURCE, SQL_LANGUAGE_YEAR,
SQL_LANGUAGE_CONFORMANCE, SQL_LANGUAGE_INTEGRITY,
SQL_LANGUAGE_IMPLEMENTATION, SQL_LANGUAGE_BINDING_STYLE,
SQL_LANGUAGE_PROGRAMMING_LANGUAGE FROM
DEFINITION_SCHEMA.SQL_LANGUAGES
3.13.24. Домен SQL_IDENTIFIER В этом домене содержатся все допустимые идентификаты. Домен определяется следующим образом:
CREATE DOMAIN SQL_IDENTIFIER
AS CHARACTER VARYING (L) CHARACTER SET SQL_TEXT
Пояснения:
3.13.25. Домен CHARACTER_DATA Этот домен содержит все символьные данные. Определение выглядит следующим образом:
CREATE DOMAIN CHARACTER_DATA
AS CHARACTER VARYING (ML) CHARACTER SET SQL_TEXT
Пояснение: ML обозначает определяемую в реализации максимально допустимую длину строки переменной длины. 3.13.26. Домен CARDINAL_NUMBER Домен содержит неотрицательные целые числа. Его определение:
CREATE DOMAIN CARDINAL_NUMBER
AS INTEGER CONSTRAINT CARDINAL_NUMBER_DOMAIN_CHECK
CHECK (VALUE >= 0)
Пояснение: целые числа, входящие в этот домен, не превышают определяемого в реализации максимально допустимого значения целого числа (определяемого в реализации значения NUMERIC_PRECISION_RADIX в степени определяемого в реализации значения NUMERIC_PRECISION). Назад | Содержание | Вперед
|
|
CITForum © 1997–2025