Hola Amig@s,
Si por un casual al compilar un paquete, os aparece el error ORA-33884 es debido a que se ha configurado un paquete plsql como EDITIONABLE. Si no os gusta tener copias del mismo paquete en la bbdd (versionado), entonces tendrán que desactivar dicha opción añadiendo la condición NONEDITIONABLE. Con ese parámetro, Oracle dejará de crear versiones del paquete para reemplazar cada vez el paquete cuando se compile.
Para hacerlo todo de golpe he encontrado un buen procedimiento que busca todos los usuarios que no sean los estandar de Oracle y luego busca todos los objetos que tenga dicho usuario marcados como EDITIONABLE y los cambia a NONEDITIONABLE sobre todo para no ir 1 a 1.
DECLARE
TYPE t_cursor IS REF CURSOR;
TYPE t_string_array IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER;
vcursor t_cursor;
varraystring t_string_array;
vstring VARCHAR2(500);
i BINARY_INTEGER;
BEGIN
OPEN vcursor FOR
select 'ALTER ' || do.object_type || ' ' || do.owner || '.' || do.object_name || ' NONEDITIONABLE'
from DBA_OBJECTS do
where do.editionable = 'Y'
and do.owner NOT IN('QS_CB','DIP','PERFSTAT','QS_ADM','PM','SH','HR','OE','ODM_MTR','WKPROXY','ANONYMOUS','OWNER','SYS','SYSTEM','SCOTT','SYSMAN','XDB','DBSNMP','EXFSYS','OLAPSYS','MDSYS','WMSYS','WKSYS','DMSYS','ODM','EXFSYS','CTXSYS','LBACSYS','ORDPLUGINS','SQLTXPLAIN','OUTLN','TSMSYS','XS$NULL','TOAD','STREAM','SPATIAL_CSW_ADMIN','SPATIAL_WFS_ADMIN','SI_INFORMTN_SCHEMA','QS','QS_CBADM','QS_CS','QS_ES','QS_OS','QS_WS','PA_AWR_USER','OWBSYS_AUDIT','OWBSYS','ORDSYS','ORDDATA','ORACLE_OCM','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR','MGMT_VIEW','MDDATA','FLOWS_FILES','FLASHBACK','AWRUSER','APPQOSSYS','APEX_PUBLIC_USER','DVSYS')
and do.object_type IN ('FUNCTION','LIBRARY','PACKAGE BODY','PACKAGE','PROCEDURE','TRIGGER','TYPE','TYPE BODY','SYNONYM','VIEW');
LOOP
FETCH vcursor BULK COLLECT
INTO varraystring;
EXIT WHEN varraystring.count = 0;
FOR i IN varraystring.first .. varraystring.last LOOP
EXECUTE IMMEDIATE varraystring(i);
END LOOP;
EXIT WHEN vcursor%NOTFOUND;
END LOOP;
CLOSE vcursor;
END;
Si no queremos que la query tenga en cuenta ciertos usuarios, deberemos añadir a la lista, los usuarios a los que no queremos aplicarle la opción de NONEDITIONABLE.
Extraído de este enlace: https://stackoverflow.com/questions/52218477/error-38824-a-create-or-replace-command-may-not-change-the-editionable-propert
Espero que les resulte útil.
Salu2.
Edu.
0 comentarios:
Publicar un comentario