6

我想为我的大多数数据库对象创建 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。

4

4 回答 4

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

PROCOBJ 是过程对象。

于 2010-07-13T12:37:49.347 回答
3
select dbms_metadata.get_ddl('PROCOBJ',['JOB'|'PROGRAM'|'SCHEDULE'],'OWNER') from dual;

PROCOBJ可以是工作、程序和时间表。

于 2016-06-04T12:54:45.060 回答
2

或者,使用 DDL 从数据库中获取所有作业:

select owner, job_name, dbms_metadata.get_ddl('PROCOBJ', job_name, owner) as ddl_output from ALL_SCHEDULER_JOBS
于 2016-10-18T12:16:05.040 回答
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.
于 2021-06-07T06:08:31.560 回答