Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/10/2014, 18:01
eduar2083
 
Fecha de Ingreso: octubre-2014
Ubicación: Lima
Mensajes: 74
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Error al listar esquemas ()

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Empecemos por el principio: ¿Para que necesitas acceder a esa tabla desde un procedimiento?
Sucede que estoy trabajando con la vista sys.all_objects para listar todos los objetos de la BD asociados a una conexión (este listado se volcará hacia la grilla de una aplicación). A su vez, el listado permitirá ser filtrado por 3 campos (owner, object_type y object_name). Los 2 primeros filtros irán en combos, donde la lista de owners la he obtenido a partir de la siguiente select hacia la misma vista:
Código SQL:
Ver original
  1. PROCEDURE pr_ListOwner
  2. (
  3.     pCursor OUT sys_refcursor
  4. )
  5. AS
  6. BEGIN
  7.     OPEN pCursor FOR
  8.     SELECT DISTINCT
  9.         a.owner
  10.     FROM all_objects a
  11.     ORDER BY owner ASC;
  12. exception
  13.   WHEN others THEN
  14.      raise_application_error(sqlcode, sqlerrm);
  15. END;

Como puedes ver, los owner los obtengo desde la misma vista que contiene los objetos, pero investigando un poco encontré que podía reemplazar por:
Código SQL:
Ver original
  1. PROCEDURE pr_ListOwner
  2. (
  3.     pCursor OUT sys_refcursor
  4. )
  5. AS
  6. BEGIN
  7.     OPEN pCursor FOR
  8.     SELECT
  9.         a.username
  10.     FROM dba_users a
  11.     ORDER BY username ASC;
  12. exception
  13.   WHEN others THEN
  14.      raise_application_error(sqlcode, sqlerrm);
  15. END;
Pero es aquí donde no me permite acceder a la vista dba_users desde el interior del procedimiento del package.

La lista de object_type la obtengo de manera análoga con una select hacia la misma vista:
Código SQL:
Ver original
  1. PROCEDURE pr_ListObjectType
  2. (
  3.     pCursor OUT sys_refcursor
  4. )
  5. AS
  6.     BEGIN
  7.     OPEN pCursor FOR
  8.     SELECT DISTINCT
  9.         a.object_type
  10.     FROM all_objects a
  11.     ORDER BY a.object_type ASC;
  12. exception
  13.     WHEN others THEN
  14.         raise_application_error(sqlcode, sqlerrm);
  15. END;
Para esta si no he encontrado una vista para reemplazarla sin utilizar la vista all_objects, pero de momento va bien, el problema es con el stored anterior que deseo reemplazar para volcar los owners hacia la aplicación pero accediendo a la vista dba_users.

Última edición por gnzsoloyo; 11/10/2014 a las 18:03 Razón: MUY MAL ETIQUETADO. Usar Highlight "SQL", por favor.