Este script sirve para recompilar todos objetos inválidos en la base de datos, debe ser corrido como el Usuario SYS:
/*
# ----------------------------------------------------------------------
# Autor                : Felipe Donoso Bastías
#
# Fecha de creación    : 29-08-2007
# 
# Objetivo             : Recompilar todos los objetos inválidos de la base de datos
#
# Modificado           : Felipe Donoso Bastías 04-09-2007
#
# ----------------------------------------------------------------------
*/
SET SERVEROUTPUT ON
DECLARE
    CURSOR C_OBJETOS 
    IS
    SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS
    WHERE STATUS = 'INVALID';
    
    nombre_objeto     VARCHAR2(100);
    propietario     VARCHAR2(100);
    tipo_objeto        VARCHAR2(100);
    sql_str         VARCHAR2(1000);
BEGIN
    OPEN C_OBJETOS;
    LOOP
        FETCH C_OBJETOS INTO propietario, nombre_objeto, tipo_objeto ;
        EXIT WHEN C_OBJETOS%NOTFOUND;
        IF tipo_objeto = 'PACKAGE BODY' THEN
            sql_str := 'ALTER PACKAGE '||propietario||'.'||nombre_objeto||' COMPILE';
            dbms_output.put_line(sql_str);
            EXECUTE IMMEDIATE sql_str;
            sql_str := 'ALTER PACKAGE '||propietario||'.'||nombre_objeto||' COMPILE BODY';
            dbms_output.put_line(sql_str);
            EXECUTE IMMEDIATE sql_str;              
        END IF;
        IF tipo_objeto = 'PROCEDURE' THEN
            sql_str := 'ALTER PROCEDURE '||propietario||'.'||nombre_objeto||' COMPILE';
            dbms_output.put_line(sql_str);
            EXECUTE IMMEDIATE sql_str;             
        END IF;
        IF tipo_objeto = 'FUNCTION' THEN
            sql_str := 'ALTER FUNCTION '||propietario||'.'||nombre_objeto||' COMPILE';
            dbms_output.put_line(sql_str);
            EXECUTE IMMEDIATE sql_str;             
        END IF;
        IF tipo_objeto = 'TRIGGER' THEN
            sql_str := 'ALTER TRIGGER '||propietario||'.'||nombre_objeto||' COMPILE';
            dbms_output.put_line(sql_str);
            EXECUTE IMMEDIATE sql_str;             
        END IF;
        IF tipo_objeto = 'VIEW' THEN
            sql_str := 'ALTER VIEW '||propietario||'.'||nombre_objeto||' COMPILE';
            dbms_output.put_line(sql_str);
            EXECUTE IMMEDIATE sql_str;             
        END IF;
    END LOOP; 
    CLOSE C_OBJETOS;
END;
/
oi andrés,
ReplyDeleteinteressante o que você propõe. haha: D, é bom que você gostou do meu blog, eu estou contente que meus posts pode parecer interessante. Uma pergunta: Qual é o endereço do seu blog para dar uma olhada?
Desculpem o meu Português ruim, mas eu falo apenas Inglês e Espanhol ...
Saudações