我想为大多数数据库对象创建ddl脚本。 dbms_metadata.get_ddl适用于大多数对象类型。例如,以下内容为视图创建了ddl:
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')。
为什么它适用于VIEW(以及TABLE,INDEX,TRIGGER,...)而不适用于JOB?
我正在使用Oracle 10g。
答案 0 :(得分:11)
select dbms_metadata.get_ddl('PROCOBJ', 'yourJobNameGoesHere') from dual;
PROCOBJ是程序性对象。
答案 1 :(得分:1)
select dbms_metadata.get_ddl('PROCOBJ',['JOB'|'PROGRAM'|'SCHEDULE'],'OWNER') from dual;
PROCOBJ
可以是JOB,PROGRAM和SCHEDULE。
答案 2 :(得分:1)
替代方案,使用DDL从数据库中获取所有作业:
select owner, job_name, dbms_metadata.get_ddl('PROCOBJ', job_name, owner) as ddl_output from ALL_SCHEDULER_JOBS
答案 3 :(得分:0)
即使我尝试了以上所有方法来获取 Oracle 10g 版中的 DDL,但没有成功。
这是我为了获取工作的详细信息而得出的结论:
set pages 200 lines 200
col owner format a20
col job_name format a25
col JOB_ACTION format a75
col COMMENTS format a60
select owner, job_name, next_run_date, state, enabled from dba_scheduler_jobs where job_name like '%AUDIT%';
-- get the detail of scheduled jobs.
select OWNER,JOB_NAME, JOB_ACTION, COMMENTS FROM DBA_SCHEDULER_JOBS where JOB_NAME='PURGE_AUDIT_LOG';
-- get the limited detail from the selected column.
select * FROM DBA_SCHEDULER_JOBS where JOB_NAME='PURGE_AUDIT_LOG';
-- to get the complete detail of a specific job along with code and other details.