0
任何人都知道從Oracle提取映射創建腳本的純sql方法?下面的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;
的問題是如果結果超過4000個字符,oracle不能連接字符串。它會拋出一個錯誤:
ORA-01489: result of string concatenation is too long
有沒有更好的方法?