2011-03-09 36 views
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 

有沒有更好的方法?

回答

4

以下將拉出一個對象的ddl。

select dbms_metadata.get_ddl('object_type_goes_here','object_name_goes_here','owner_goes_here') 
from dual