Una de las librerías mas útiles de Oracle para obtener código de una base de datos es la librería DBMS_METADATA.GET_DDL.
Con la llegada de 12c tenemos la nueva funcionalidad de objetos «EDITIONABLE/NONEDITIONABLE » , si usamos la librería DBMS_METADATA.GET_DDL, el código de aplicación que nos generará incluirá esta propiedad.
Pero que pasaría al intentar ejecutarlo en otra base de datos 11g, si ejecutamos el código
CREATE OR REPLACE EDITIONABLE PROCEDURE "ESQUEMA"."PRUEBA" (
Nos encontraremos con el error
ERROR en línea 1: ORA-00922: falta la opción o no es válida
¿Como mitigamos este error?
Actualmente hacemos las llamadas de la forma
DBMS_METADATA.GET_DDL('${TIPO}','${OBJETO}','${ESQUEMA}')
Simplemente tendremos que poner un parámetro adicional de compatibilidad de código ,fijándolo a la 11.2.0, que es la última versión donde no está definido el EDITIONABLE en el código
DBMS_METADATA.GET_DDL('${TIPO}','${OBJETO}','${ESQUEMA}','11.2.0')
Como siempre ,más información en soporte
- Doc ID 2079143.1How to Remove EDITIONABLE/NONEDITIONABLE Clause when DBMS_METADATA.GET_DDL