Кто-нибудь знает чистый метод 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
Есть ли лучший способ?