Oracle 的 dbms_metadata.get_ddl for object_type JOB

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3235300/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-10 02:41:03  来源:igfitidea点击:

Oracle's dbms_metadata.get_ddl for object_type JOB

oracleoracle10gjobsora-06512dbms-metadata

提问by asalamon74

I'd like to create ddl scripts for most of my database objects. dbms_metadata.get_ddlworks for most of the object types. For instance the following creates the ddl for a view:

我想为我的大多数数据库对象创建 ddl 脚本。dbms_metadata.get_ddl适用于大多数对象类型。例如,以下内容为视图创建 ddl:

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

On the other hand it's not working for object_type 'JOB'. The following:

另一方面,它不适用于 object_type 'JOB'。下列:

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

gives the following error:

给出以下错误:

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

If I list my jobs using

如果我列出我的工作使用

select * from user_objects where object_type='JOB'

it shows SAMPLE_JOB (just like it shows SAMPLE_VIEW if filtered for object_type='VIEW').

它显示 SAMPLE_JOB(就像它显示 SAMPLE_VIEW 如果过滤了 object_type='VIEW' 一样)。

Why is it working for VIEW (and TABLE, INDEX, TRIGGER, ...) and not for JOB?

为什么它适用于 VIEW(以及 TABLE、INDEX、TRIGGER 等)而不适用于 JOB?

I'm using Oracle 10g.

我正在使用 Oracle 10g。

回答by dpbradley

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

PROCOBJ's are procedural objects.

PROCOBJ 是过程对象。

回答by Bikash Kumar Kar

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

The PROCOBJcan be JOB, PROGRAM and SCHEDULE.

PROCOBJ可JOB,方案和时间安排。

回答by Alfons

Alternative, get all jobs from the database with their DDL:

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

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