Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
Никому не попадались скрипты создания INFORMATION_SCHEMA по стандартам SQL 92-2003 как представлений над Оракловым словарём данных?

Пока нашёл только то, как это сделано в Postgres'е. Велосипедить не хочется, но возможно, придётся.

Зачем это нужно - для написания СУБД-независимой кодогенерации.
27 апр 07, 11:13    [4077921]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
Пока нашёл только кусок для SCHEMATA, TABLE, VIEW

http://groups.google.com/group/comp.databases.oracle.misc/msg/58a8a312b91bfef4?hl=en&lr=

CREATE USER "INFORMATION_SCHEMA" IDENTIFIED BY "schema" ACCOUNT LOCK;

--------

CREATE VIEW INFORMATION_SCHEMA.SCHEMATA (CATALOG_NAME, SCHEMA_NAME,
SCHEMA_OWNER, DEFAULT_CHARACTER_SET_CATALOG, DEFAULT_CHARACTER_SET_SCHEMA,
DEFAULT_CHARACTER_SET_NAME)
as
SELECT CAST((SELECT property_value FROM database_properties WHERE
property_name='GLOBAL_DB_NAME') AS varchar2(30))
, username
, username
, CAST(null AS varchar2(30))
, CAST(null AS varchar2(30))
, CAST((SELECT property_value FROM database_properties WHERE
property_name='NLS_CHARACTERSET') AS varchar2(30))
FROM sys.all_users;

GRANT SELECT ON INFORMATION_SCHEMA.SCHEMATA TO PUBLIC WITH GRANT OPTION;

--------

CREATE VIEW INFORMATION_SCHEMA.TABLES (TABLE_CATALOG, TABLE_SCHEMA,
TABLE_NAME, TABLE_TYPE)
as
SELECT CAST((SELECT property_value FROM database_properties WHERE
property_name='GLOBAL_DB_NAME') AS varchar2(30))
, o.owner
, o.object_name
, case o.object_type
        when 'TABLE' then 'BASE TABLE'
        when 'VIEW' then 'VIEW'
        else null
end
FROM sys.all_objects o
WHERE (o.object_type='TABLE' or o.object_type='VIEW');

GRANT SELECT ON INFORMATION_SCHEMA.TABLES TO PUBLIC WITH GRANT OPTION;

--------

CREATE VIEW INFORMATION_SCHEMA.VIEWS (TABLE_CATALOG, TABLE_SCHEMA,
TABLE_NAME, VIEW_DEFINITION, CHECK_OPTION, IS_UPDATABLE)
as
SELECT CAST((SELECT property_value FROM database_properties WHERE
property_name='GLOBAL_DB_NAME') AS varchar2(30))
, o.owner
, o.view_name
, TEXT
, CAST(null AS varchar2(10))
, 'NO'
FROM sys.all_views o;

GRANT SELECT ON INFORMATION_SCHEMA.VIEWS TO PUBLIC WITH GRANT OPTION; 
27 апр 07, 11:53    [4078280]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Fyodor Zevako
Member

Откуда:
Сообщений: 570
простите, а зачем Вам субднезависимая?:-))
27 апр 07, 18:09    [4081092]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
Fyodor Zevako
простите, а зачем Вам субднезависимая?:-))
Затем, что не хочется писать под каждую СУБД свой набор скриптов каждый раз.
27 апр 07, 18:20    [4081137]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Fyodor Zevako
Member

Откуда:
Сообщений: 570
т.е. на произврдительность насрать?:-)))
27 апр 07, 18:21    [4081143]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
Fyodor Zevako
т.е. на произврдительность насрать?:-)))


Кодогенрация на этапе разработки БД и администрирования, а не в runtime, поэтому производительность не нужна.
27 апр 07, 18:25    [4081158]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Fyodor Zevako
Member

Откуда:
Сообщений: 570
ну кодогенерация у вас же для всех субд одинакова:-))) вот там как раз и просад будет:-))
27 апр 07, 18:27    [4081168]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
Пример 1 - Повышение прозрачности кода существующей схемы

Сценарий:
1. Взять список внешних ключей во всей схеме
2. Переименовать каждый ключ в формат FK_%имя_ссылающейся_таблицы%_2_%имя_целевой_таблицы%.

Пример 2 - Аудит использования таблиц и столбцов

Сценарий:
1. Взять список всех таблиц схемы
2. Для каждой таблицы получить и вывести число строк в ней
3. Для каждой таблицы получить и вывести число столбцов, не содержащих ни одного значения
27 апр 07, 18:34    [4081197]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
PPA
Member

Откуда: Караганда -> Липецк
Сообщений: 812
Майевтик
Пример 1 - Повышение прозрачности кода существующей схемы
Сценарий:
1. Взять список внешних ключей во всей схеме
2. Переименовать каждый ключ в формат FK_%имя_ссылающейся_таблицы%_2_%имя_целевой_таблицы%.

а имя атрибутов где?
также вы тут "упадете" по исключению (размер наименования ключа ограничен)
28 апр 07, 06:49    [4082080]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
Мне кстати тоже действительно очень интересна причина по которой хочется отвязаться от БД.

Ну понятно было бы желание отвязаться от MSSQL - он только на винде и живет.

Но от ORACLE то зачем отвязываться? Он живет на десятке операционок и туче железа.
Зачем Вам поддерживать еще и другие СУБД?
28 апр 07, 09:02    [4082226]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Ionah
Мне кстати тоже действительно очень интересна причина по которой хочется отвязаться от БД.

Ну понятно было бы желание отвязаться от MSSQL - он только на винде и живет.

Но от ORACLE то зачем отвязываться? Он живет на десятке операционок и туче железа.
Зачем Вам поддерживать еще и другие СУБД?

заказчик может "испугаться" Oracl'a
28 апр 07, 09:36    [4082366]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
Petro123
Ionah
Мне кстати тоже действительно очень интересна причина по которой хочется отвязаться от БД.

Ну понятно было бы желание отвязаться от MSSQL - он только на винде и живет.

Но от ORACLE то зачем отвязываться? Он живет на десятке операционок и туче железа.
Зачем Вам поддерживать еще и другие СУБД?

заказчик может "испугаться" Oracl'a


А зачем тогда вообще для ORACLE что-то ваять?
Писать сразу под конкретную БД.

Мне очень у Кайта нравится, что-то вроде:
"Разработчики с готовностью привязываются к очень узким технологиям и языкам программирования, которые существуют на очень ограниченном наборе софта / железа, типа C#, .NET, COM,
jднако всеми силами пытаются отвязаться от конкретной БД, что жутко влияет на производительность.
"
28 апр 07, 09:43    [4082394]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
PPA
Майевтик
Пример 1 - Повышение прозрачности кода существующей схемы
Сценарий:
1. Взять список внешних ключей во всей схеме
2. Переименовать каждый ключ в формат FK_%имя_ссылающейся_таблицы%_2_%имя_целевой_таблицы%.

а имя атрибутов где?
также вы тут "упадете" по исключению (размер наименования ключа ограничен)
Ой, ну я же просто идею набросал, а не формальную спецификацию писал.

понятно, что в реальном коде будет либо конфиг этого скрипта, который будет обрезать названия под допустимую длину имени целевой СУБД, либо вообще будет брать не имя таблицы, а её синоним.

опять же синонимы создаются из имени таблицы скриптом по определённым правилам (хотя бы по таблице соответствий слов и сокращений)
28 апр 07, 09:45    [4082405]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
Ionah
Мне кстати тоже действительно очень интересна причина по которой хочется отвязаться от БД.

Ну понятно было бы желание отвязаться от MSSQL - он только на винде и живет.

Но от ORACLE то зачем отвязываться? Он живет на десятке операционок и туче железа.
Зачем Вам поддерживать еще и другие СУБД?
Ещё раз объясняю.

Я пишу код, который переименовывает ограничения типа NOT NULL в нормальный читаемый вид для Oracle: http://community.livejournal.com/ru_oracle/43871.html

Т.к. я систематически работаю с SQL Server, mysql и изучаю postgres, то возникла мысль - почему бы не воспользоваться инженерным принципом повторного использования и сделать нечто вроде библиотеки скриптов.

Для этого в качестве скриптового языка я выбираю python, который хорошо умеет работать с текстом и есть на многих платформах.

Соответственно при работе с метаданным, системным словарём мне нужно единообразие. SQL Server, mysql и postgres такой уровень изоляции, как INFORMATION_SCHEMA, предоставляют (с переменным успехом), Oracle - нет, хотя это совсем не сложно, как можно видеть по скриптам выше.
28 апр 07, 09:52    [4082438]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Майевтик
Member

Откуда: Москва
Сообщений: 259
Petro123
Ionah
Мне кстати тоже действительно очень интересна причина по которой хочется отвязаться от БД.

Ну понятно было бы желание отвязаться от MSSQL - он только на винде и живет.

Но от ORACLE то зачем отвязываться? Он живет на десятке операционок и туче железа.
Зачем Вам поддерживать еще и другие СУБД?

заказчик может "испугаться" Oracl'a
Какой ещё Заказчик?

Задачи, которые я проводил - это внутренние задачи разработчика, повышающие качество и эффективность его работы + инструмент аудитора систем.

Это инструменты из той же серии, что и Рефакторинг и Модульные тесты - при необходимости Заказчику можно обосновать их применение, но обычно это внутреннее дело разработчика, также как зачастую (к сожалению) стандарты именования и проектирования вообще.
28 апр 07, 09:56    [4082454]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38640
Майевтик

Какой ещё Заказчик?

Задачи, которые я проводил - это внутренние задачи разработчика, повышающие качество и эффективность его работы + инструмент аудитора систем.

Это инструменты из той же серии, что и Рефакторинг и Модульные тесты - при необходимости Заказчику можно обосновать их применение, но обычно это внутреннее дело разработчика, также как зачастую (к сожалению) стандарты именования и проектирования вообще.

я пошутил, т.к. плохо отношусь к проектированию приложений для всех подряд СУБД.
Если это инструмент для самих разработчиков - нет проблем.
28 апр 07, 10:14    [4082550]     Ответить | Цитировать Сообщить модератору
 Re: INFORMATION_SCHEMA  [new]
Ionah
Member

Откуда: Новосибирск
Сообщений: 290
Petro123
Майевтик

Какой ещё Заказчик?

Задачи, которые я проводил - это внутренние задачи разработчика, повышающие качество и эффективность его работы + инструмент аудитора систем.

Это инструменты из той же серии, что и Рефакторинг и Модульные тесты - при необходимости Заказчику можно обосновать их применение, но обычно это внутреннее дело разработчика, также как зачастую (к сожалению) стандарты именования и проектирования вообще.

я пошутил, т.к. плохо отношусь к проектированию приложений для всех подряд СУБД.


Полностью поддерживаю
28 апр 07, 11:25    [4082965]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить