2010-07-13 67 views
4

我想爲我的大部分數據庫對象創建ddl腳本。 dbms_metadata.get_ddl適用於大多數對象類型。例如,以下內容爲視圖創建ddl:Oracle的object_type的dbms_metadata.get_ddl JOB

select dbms_metadata.get_ddl ('VIEW', 'SAMPLE_VIEW') from dual 

另一方面,它不適用於object_type'JOB'。以下:

select dbms_metadata.get_ddl('JOB', 'SAMPLE_JOB') from dual 

提供了以下錯誤:

ORA-31604: invalid NAME parameter "NAME" for object type JOB in function SET_FILTER 
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 116 
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4705 
ORA-06512: at "SYS.DBMS_METADATA_INT", line 8582 
ORA-06512: at "SYS.DBMS_METADATA", line 2882 
ORA-06512: at "SYS.DBMS_METADATA", line 2748 
ORA-06512: at "SYS.DBMS_METADATA", line 4333 
ORA-06512: at line 1 

如果我列出使用

select * from user_objects where object_type='JOB' 

它顯示SAMPLE_JOB(就像它顯示SAMPLE_VIEW如果過濾的OBJECT_TYPE我的工作=」視圖')。

爲什麼它在VIEW(和TABLE,INDEX,TRIGGER,...)中工作而不是在JOB中工作?

我正在使用Oracle 10g。

回答

11
select dbms_metadata.get_ddl('PROCOBJ', 'yourJobNameGoesHere') from dual; 

PROCOBJ's是程序對象。

+0

感謝。這對我有用。 – asalamon74 2010-07-13 12:57:17

+0

還有一點需要注意的地方 - 甲骨文本應該在11.2中解決這個問題,所以它沒有這個魔法 - 沒有檢查過。 – dpbradley 2010-07-13 13:05:23

+1

@dpbradley - 他們還沒有,至少不是11.2.0.1.0(Linux x86-64)。 – 2011-07-19 20:29:06

0
select dbms_metadata.get_ddl('PROCOBJ',['JOB'|'PROGRAM'|'SCHEDULE'],'OWNER') from dual; 

PROCOBJ可以是JOB,PROGRAM和SCHEDULE。

0

替代,從數據庫中獲取所有的工作與他們的DDL:

select owner, job_name, dbms_metadata.get_ddl('PROCOBJ', job_name, owner) as ddl_output from ALL_SCHEDULER_JOBS