Buen dia
Tengo este script que puedo ejecutar sin ningun problema desde editor de toad.
Sin embargo al ponerlo dentro de un procedimiento almacenado marca el error
PL/SQL: ORA-00942: la tabla o vista no existe
en el renglon donde consulto la vista: sys.dba_objects
Este es el script.
PROCEDURE COMPILA_PAQUETES
IS
lpaqdef VARCHAR(100);
lpaqbody VARCHAR(100);
lcursor sys_refcursor;
lrowcount number(5);
G_MSG VARCHAR2(250);
CURSOR paquetes_cur IS
select dbo.owner, dbo.object_type, dbo.object_name, dbo.status,
'alter package '||dbo.owner||'.'||dbo.object_name||' compile ' as compila_pkgdef,
'alter package '||dbo.owner||'.'||dbo.object_name||' compile body' as compila_pkdbody
from sys.dba_objects dbo
where ( dbo.status='INVALID' and dbo.object_type like '%PACKAGE BODY%')
order by dbo.owner, dbo.object_type, dbo.object_name, dbo.status;
row_paquetes paquetes_cur%ROWTYPE;
BEGIN
OPEN paquetes_cur;
lrowcount := paquetes_cur%ROWCOUNT;
G_MSG := lrowcount || ' <-- Paquetes descompilados: ' ;
DBMS_OUTPUT.PUT_LINE(G_MSG);
LOOP
FETCH paquetes_cur INTO row_paquetes;
EXIT WHEN paquetes_cur%NOTFOUND;
G_MSG := 'P > ' || row_paquetes.owner || '.' || row_paquetes.object_name;
DBMS_OUTPUT.PUT_LINE(G_MSG);
G_MSG := row_paquetes.compila_pkdbody;
BEGIN
EXECUTE IMMEDIATE G_MSG;
EXCEPTION
WHEN OTHERS THEN -- handles all other errors
G_MSG := 'ERROR: ' || SQLCODE || '-' || SQLERRM ;
DBMS_OUTPUT.PUT_LINE(G_MSG);
END;
DBMS_OUTPUT.PUT_LINE(chr(10));
END LOOP;
CLOSE paquetes_cur;
END COMPILA_PAQUETES;
Alguna ayuda por favor.
- Inicie sesión para enviar comentarios