Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru »
Online книги »
SQL книги »
Введение в стандарты языка баз данных SQL3.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). Назад | Содержание | Вперед |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|