loading..
Русский    English
13:19
листать

INFORMATION_SCHEMA и Oracle

Информационная схема (INFORMATION_SCHEMA) является стандартным представлением метаданных в языке SQL. Исторически каждый производитель реляционных СУБД предоставлял системные таблицы, которые содержали мета-информацию - имена таблиц, столбцов, ограничений, типы данных столбцов и т.д. Структура и состав системных таблиц могут меняться в разных версиях продукта, однако поддержка информационной схемы дает возможность менять структуру системных таблиц без изменения способа доступа к метаданным. Другим преимуществом применения INFORMATION_SCHEMA является то, что запросы к метаданным не зависят от используемой СУБД.

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

Приведем ряд типичных запросов в стандартном варианте и для Oracle.

1. Список таблиц базы данных (текущей)

Стандартное

Консоль
Выполнить
  1. SELECT table_name FROM information_schema.TABLES;

Oracle

  1. SELECT table_name FROM all_tables WHERE owner='ИМЯ СХЕМЫ';


2. Список столбцов заданной таблицы (например, PC)

Стандартное

Консоль
Выполнить
  1. SELECT column_name FROM information_schema.COLUMNS WHERE table_name='PC';

Oracle

  1. SELECT column_name FROM all_tab_columns WHERE table_name='PC';

3. Тип данных и размер заданного символьного столбца таблицы (столбец model таблицы PC)

Стандартное

Консоль
Выполнить
  1. SELECT column_name, data_type, CHARACTER_MAXIMUM_LENGTH
  2. FROM information_schema.COLUMNS WHERE table_name='PC' AND column_name = 'model';

Oracle

  1. SELECT column_name,data_type,data_length FROM all_tab_columns
  2. WHERE table_name='PC'AND column_name='MODEL';

4. Имя ограничения первичного ключа таблицы PC

Стандартное

Консоль
Выполнить
  1. SELECT table_name,constraint_name  FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
  2. WHERE table_name='PC' AND CONSTRAINT_TYPE='Primary key';

Oracle

  1. SELECT table_name,constraint_name FROM all_constraints
  2. WHERE table_name='PC' AND constraint_type='P';

5. Список столбцов, составляющих первичный ключ таблицы Utb

Стандартное

Консоль
Выполнить
  1. SELECT table_name, column_name 
  2. FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE table_name='utb'
  3. AND constraint_name=(SELECT constraint_name FROM INFORMATION_SCHEMA.table_constraints
  4. WHERE table_name='utb' AND CONSTRAINT_TYPE='Primary key');

Здесь мы в основном запросе получаем столбцы, участвующие в ограничениях, и выбираем те из них, у которых имя ограничения совпадает с именем ограничения первичного ключа для той же таблицы. В принципе, условие table_name='utb' основного запроса является избыточным с точки зрения получения правильного ответа, поскольку имя ограничения является уникальным для всей базы. Однако ранняя фильтрация существенно ускоряет выполнение запроса.

Оракл

  1. SELECT table_name, column_name FROM all_ind_columns WHERE table_name='UTB'
  2. AND index_name=(SELECT constraint_name FROM all_constraints
  3. WHERE table_name='UTB' AND constraint_type='P');

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INFORMATION_SCHEMA INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker Больше тэгов
Учебник обновлялся
месяц назад
продать рнкб
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.