2010-07-13 3 views
4

Я хотел бы создать сценарии ddl для большинства моих объектов базы данных. dbms_metadata.get_ddl работает для большинства типов объектов. Например следующее создает DDL для зрения:Oracle dbms_metadata.get_ddl для object_type 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, ...), а не для РАБОТЫ?

Я использую Oracle 10g.

ответ

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

PROCOBJ - это процедурные объекты.

+0

Спасибо. Это работает для меня. – asalamon74

+0

Дополнительное примечание - Oracle должен был исправить это в 11.2, поэтому он работает без этой магии - не проверял. – dpbradley

+1

@dpbradley - они не имеют, по крайней мере, не от 11.2.0.1.0 (Linux x86-64). –

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

PROCOBJ МОЖЕТ РАБОТАТЬ, ПРОГРАММА И РАСПИСАНИЕ.

0

Альтернатива, получить все задания из базы данных с их DDL:

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

 Смежные вопросы

  • Нет связанных вопросов^_^