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