Merci à vous pour vos réponses rapides, et désolé pour le retard.
J'ai pour l'instant avancé comme suit :
1 2 3 4 5 6 7 8 9 10 11
| PROCEDURE save_object_ddl(p_object IN Varchar2) IS
v_type Varchar2;
v_nom Varchar2;
BEGIN
select dbms_metadata.get_ddl('TABLE', 'MA_TABLE') from dual;
select dbms_metadata.get_ddl('VIEW', 'MA_VUE') from dual;
select dbms_metadata.get_ddl('INDEX', 'MON_INDEX') from dual;
select dbms_metadata.get_ddl('PROCEDURE', 'MA_PROC_STOCK') from dual;
select dbms_metadata.get_ddl('FUNCTION', 'MA_FONCTION') from dual;
commit;
END save_object_ddl; |
J'aimerais maintenant faire en sorte qu'au début de la procédure, au lieu d'avoir tous les "select dbms_metadata.get_ddl", il y aurait juste :
select dbms_metadata.get_ddl('v_type', 'v_nom') from dual;
Et ce, peut importe le type d'objet passé en paramètre à la fonction, ce qui me donne un truc comme ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| PROCEDURE save_object_ddl(p_object IN Varchar2) IS
v_type Varchar2(100);
v_name Varchar2(100);
BEGIN
select object_name into v_name from all_objects
where owner = user
and object_name = p_object;
select object_type into v_type from all_objects
where owner = user
and object_name = p_object;
select dbms_metadata.get_ddl('v_type', 'v_nom') into save_object_ddl_table from dual;
commit;
END save_object_ddl; |
J'ai avant ça créé une table "save_object_ddl_table" :
create table save_object_ddl_table (code varchar2(3000));
Par contre j'ai une erreur :
- Erreur(18,5): PL/SQL: SQL Statement ignored
- Erreur(18,58): PLS-00403: l'expression 'SAVE_OBJECT_DDL_TABLE' ne peut être utilisée comme cible INTO d'une instruction SELECT/FETCH
- Erreur(18,80): PL/SQL: ORA-00904: : identificateur non valide
Quelqu'un sait d'où vient le problème ?
Merci d'avance
Partager