2010-07-13 21 views
4

Je voudrais créer des scripts ddl pour la plupart de mes objets de base de données. dbms_metadata.get_ddl fonctionne pour la plupart des types d'objets. Par exemple, le code suivant crée la ddl pour une vue:Oracle dbms_metadata.get_ddl pour object_type JOB

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

D'autre part, il ne fonctionne pas pour object_type « JOB ». Ce qui suit:

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

donne l'erreur suivante:

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 

Si je liste mes travaux à l'aide

select * from user_objects where object_type='JOB' 

il montre SAMPLE_JOB (comme il montre SAMPLE_VIEW si filtrée pour object_type = » VUE').

Pourquoi cela fonctionne-t-il pour VIEW (et TABLE, INDEX, TRIGGER, ...) et non pour JOB? J'utilise Oracle 10g.

Répondre

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

Les PROCOBJ sont des objets procéduraux.

+0

Merci. Cela fonctionne pour moi. – asalamon74

+0

Une note supplémentaire - Oracle était censé corriger cela en 11.2 pour que cela fonctionne sans cette magie - n'a pas vérifié. – dpbradley

+1

@dpbradley - ils ne l'ont pas, au moins pas à partir de 11.2.0.1.0 (Linux x86-64). –

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

Le PROCOBJ peut être JOB, PROGRAM et SCHEDULE.

0

Alternative, obtenir tous les emplois de la base de données avec leur LDD:

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