Как мы уже упоминали, в стандарте 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> ::= См. пояснения ниже
Пояснения:
(a) если S - это оператор подключения, то
(i) очищается область диагностики;
(ii) S выполняется;
(iii) если оператор S успешно инициировал или возобновил SQL-сессию, то последующие вызовы операторов прямого SQL данным SQL-агентом связываются с этой сессией, пока SQL-агент не завершит ее или не сделает потенциальной;
(b) в противном случае:
(i) если для SQL-агента не существует текущая SQL-сессия, то:
(*) если SQL-агент не выполнял оператора подключения и с ним не связана SQL-сессия по умолчанию, то выполняется следующий оператор подключения: CONNECTTODEFAULT;
(**) если SQL-агент не выполнял оператора подключения и с ним связана SQL-сессия по умолчанию, то выполняется следующий оператор установки подключения: SETCONNECTIONDEFAULT;
(***) в противном случае возникает исключительное условие;
(ii) если для данного SQL-агента существует активная транзакция, то S связывается с этой транзакцией SQL-transaction; если S - прямой оператор SQL, определяемый в реализации, то в реализации же определяется, может ли S ассоциироваться с текущей транзакцией, если не может, то возбуждается исключительное условие;
(iii) если для данного SQL-агента не существует активной транзакции, то
(*) если S является инициирующим транзакцию оператором, то инициируется SQL-транзакция;
(**) если S является прямым оператором, определяемым в реализации, то в реализации же определяется, инициирует ли S транзакцию; если инициирует, то инициируется SQL-транзакция.
(***) если оператор S инициировал транзакцию, то пусть T обозначает эту транзакцию; тогда:
(****) T ассоциируется с данным вызовом и со всеми последующими вызовами прямых операторов SQL и процедур, производимых данным SQL-агентом, до тех пор, пока этот агент не завершит T;
(*****) если после завершения последней транзакции в данной SQL-сессии был выполнен оператор установки параметров транзакции, то режим доступа, режим проверки ограничений и уровень изоляции T устанавливаются в соответствии с заданными параметрами;
(******) в противном случае для T устанавливается режим доступа "чтение-запись", режим проверки ограничений "немедленный" и уровень изоляции;
(*******) T ассоциируется с текущей SQL-сессией;
(iv) область диагностики очищается;
(v) S выполняется.
Как видно из синтаксических правил, определяющих набор прямых операторов SQL, в состав этого набора входит специальный оператор выборки, не употребляемый в других контекстах и потому не рассмотренный нами ранее. Синтаксис этого оператора следующий:
<direct select statement: multiple rows> ::= <query expression> [ <order by clause> ]
Пояснения:
Информационная схема (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).
Назад | Содержание | Вперед