Извлечь сопоставления хранилища как сценарий создания - PullRequest
0 голосов
/ 09 марта 2011

Кто-нибудь знает чистый метод sql для извлечения сценариев создания сопоставлений из Oracle? следующий SQL возвращает правильные результаты:

SELECT text FROM dba_source WHERE NAME = 'MAPPING_NAME' AND TYPE = 'PACKAGE';

Но чтобы превратить это в одну строку, я использовал подсказку из http://dotnetsurfers.com/blog/2008/01/16/concatenating-rows-in-a-table-into-a-single-string-using-sql/, поэтому теперь у меня есть это:

SELECT SYS_CONNECT_BY_PATH(text, ' ') PackageScript FROM (
  SELECT text, ROW_NUMBER() OVER (order by line) rownumber, COUNT(*) OVER () cnt
  FROM (SELECT text, line FROM dba_source WHERE NAME = 'MAPPING_NAME' AND TYPE = 'PACKAGE' AND substr(text, 0,2) != '--' AND text IS NOT NULL)
) data
WHERE rownumber = cnt
START WITH rownumber = 1
CONNECT BY PRIOR rownumber = rownumber-1;

Проблема в том, что oracle не может объединить строку, если результат больше 4000 символов. Выдает ошибку:

ORA-01489: result of string concatenation is too long

Есть ли лучший способ?

1 Ответ

4 голосов
/ 09 марта 2011

Следующее извлечет ddl для объекта.

select dbms_metadata.get_ddl('object_type_goes_here','object_name_goes_here','owner_goes_here') 
from dual
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...