Sepa Utilizar la Tabla ALL_SOURCE en su Base de Datos Oracle

Si aprende como utilizar correctamente la tabla All_Source en su Base de Datos Oracle podrá obtener rápidamente información de los objetos que contenga su Base de Datos. En pocas palabras la tabla All_Source es una vista que contiene el código fuente de todos los Packages en Oracle, Procedures en Oracle, Function en Oracle, Triggers y otros objetos que sean accesibles por la cuenta de usuario actual, es decir, All_Source muestra solo los objetos sobre los cuales la cuenta de usuario tenga permisos de lectura.

La vista All_Source generalmente se usa para buscar la ubicación de otros objetos como nombres de tablas, nombres de campos, nombres de procesos, etc. La estructura de la tabla All_Source es la siguiente:

Columna        Descripción

Owner            Contiene la cuenta o esquema dueño del objeto.

Name              Contiene el nombre del objeto.

Type               Contiene el tipo del objeto:  Package, Package Body, Procedure, Function.

Line                 Contiene el número de línea del código fuente.

Text                Contiene el código fuente del objeto almacenado.

Revisemos algunos ejemplos para que entiendas mejor como se debe usar la vista All_Source.

Ejemplo #1: Supone que necesitas saber que proceso realiza un Insert sobre la tabla t_empleado, veamos como se hace:

/* Packages en Oracle */

Select owner, name, type, line, text

From All_Source

Where lower(text) like lower(‘%insert into t_empleado%’);

Esta consulta muestra como resultado algo como lo siguiente:

owner             name                          type                line      text

sistema_01     pkg_mant_empleado package body 1568    insert into t_empleado

sistema_03     prc_actualiza_emp     procedure       189      insert into t_empleado

En este ejemplo se esta buscando el insert a la tabla t_empleado en todos los objetos que contenga la vista All_Source, detectando que existen solo 2 procesos que realizan un insert sobre esta tabla.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”  ¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Ejemplo #2: Supone ahora que debes buscar que objeto esta llamando a un procedimiento  pero solo en un esquema y un tipo de objeto en particular, veamos como hace:

/* Packages en Oracle */

Select name, line, text

From All_Source

Where lower(text) like lower(‘%prc_actualiza_emp%’);

And owner = ‘sistema_03’

And type = ‘package body’

Esta consulta muestra como resultado algo como lo siguiente:

name                          line      text

pkg_depto_actual       589      prc_actiualiza_emp(lin_rut, lst_dv, lst_nombre, lst_direc);

pkg_new_depto          2678    prc_actiualiza_emp(lin_rut, lst_dv, lst_nombre, lst_direc);

En este ejemplo se busca el procedimiento ‘prc_actualiza_emp‘ en el esquema ‘sistema_03’ y donde el tipo de objeto sea ‘package body’.

Te propongo que pruebes de inmediato este ejemplo en tu Base de Datos con tus propios procedimientos y funciones para que comiences a ejercitar la mano y aprendas a dominar esta nueva técnica.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en 7 Pasos

Esta entrada fue publicada en Function en Oracle, Packages en Oracle, Procedures en Oracle y etiquetada , , , , , . Guarda el enlace permanente.

20 respuestas a Sepa Utilizar la Tabla ALL_SOURCE en su Base de Datos Oracle

  1. Juan Pablo dijo:

    Como es puede obtener la cantidad de lineas por porcedimiento a partir de la tabla all_source

    • Hola Juan Pablo, gracias por leer mi blog, para obtener la cantidad de lineas de cada procedimiento que tengas, puedes hacer lo siguiente:

      select type, name, count(1) lineas
      from all_source
      where type = ‘PROCEDURE’
      group by type, name

      Siempre para ayudarte …
      Saludos
      Roberto Vicencio

  2. Carolina Hernandez dijo:

    Me gusto la explicación, muchas gracias

  3. … Superrr gracias por la información y por compartir tus conocimientos!!…
    Saludos Kt!K…
    –Ecuador–

  4. wilfredo dijo:

    Gracias por la informacion es muy interesante. sdos

    • Hola Wilfredo, gracias por comunicarte y por tu comentario, seguiré preparando información que sea util para la comunidad de desarrolladores en Oracle, gracias.

      PD: Ya obtuviste mi reporte gratuito sobre “Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aún no lo has hecho puedes obtenerlo desde aquí:
      http://dominatuspackagesenoracle.com

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  5. Jesús Vázquez Pintor dijo:

    Excelente!!!! Gracias por compartir. Una pregunta más, Así como se realizo una búsqueda a todos los objetos de la base de datos, es posible aplicar una actualización, p/e un replace de cierto texto.

    • Hola Jesús, gracias por comunicarte y por tu comentario, la verdad es que no he probado hacer un replace de un texto, si lo haces debes tener en cuenta que los objetos queden compilados, cuéntanos si te funcionó esta actualización, como lo hiciste y si tuviste algún problema, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  6. JAZ dijo:

    Como se puede buscar un dato en toda la base de datos?? (oracle)

    • Hola Jaz, gracias por comunicarte, buscar un dato en toda la base de datos puede parecer una tarea dificil si no tienes una pista de cual es la tabla y la columna donde puede estar, para solucionar esto puedes usar la tabla dba_tab_columns la que contiene todos los esquemas, tablas y columnas de la base de datos, a continuación se muestro un ejemplo para buscar un dato de tipo texto, donde debes reemplazar el dato que deseas buscar y el esquema:

      lst_buscar varchar2(50);
      lst_sql varchar2(500);
      lin_total number;
      begin
      lst_buscar:= ‘TU_TEXTO’;
      for dato in ( select owner,table_name,column_name,data_type
      from dba_tab_columns
      where owner=’TU_ESQUEMA’
      and data_type in (‘CHAR’,’VARCHAR2′)
      )
      loop
      lst_sql := ‘select count(*) from ‘||dato.owner||’.’||dato.table_name||’ where ‘||dato.column_name||’ like ”%’||lst_buscar||’%”’;
      execute immediate lst_sql into lin_total;
      if lin_total>0 then
      dbms_output.put_line(lst_sql);
      dbms_output.put_line(dato.owner||’.’||dato.table_name||’.’||dato.column_name||’ Regitros ‘||lin_total);
      end if;
      end loop;
      end;

      PD: Ya obtuviste mi libro-reporte gratuito sobre ‘Cómo Construir un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aún no lo tienes puedes obtenerlo desde aquí:
      http://DominaTusPackagesEnOracle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  7. vagosen dijo:

    Excelente explicación y muchas gracias por compartir tu experiencia y experticia con esta base de datos

  8. polo dijo:

    Hola, justo la web que necesitaba!! guardando en mis “favoritos”🙂 muchas gracias por compartir tu conocimiento!
    Saludos desde Uy!

    • Hola Polo, gracias por comunicarte y por tu comentario, me da mucho gusto que la información del blog te sea de utilidad, ya obtuviste mi libro-reporte gratuito sobre “Como Construir un SELECT Eficiente en Oracle en Solo 7 Pasos”, si aun no lo tienes puedes obtenerlo desde este enlace: http://dominatuspackagesenoracle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  9. Lenin Balladares dijo:

    Buenos dias, tengo una duda: ¿cuales podrían ser las desventajas de usar esta tabla? Me refiero a que me han dicho que este tipo de tablas de oracle, generan concurrencia y bloqueos a la base de datos, no tengo mucha experiencia en oracle es por eso que no se cuan cierto sea eso. De antemano gracias por su respuesta.

    Saludos.

    • Hola Lenin, gracias por comunicarte, esta tabla en particular es propia de la Base de Datos, solo se debe usar a modo de consulta (Select) y para hacer búsquedas específicas como la que se indica en el artículo, en ningún caso debe ser usada dentro de un procedure u otro objeto.

      PD: Ya pudiste ver mi libro reporte sobre ‘Cómo Crear un SELECT Eficiente en Oracle en Solo 7 Pasos’, si aun no lo tienes puedes obtenerlo desde aquí: http://dominatuspackagesenoracle.com/

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

  10. tata dijo:

    hola buenos dias, si yo quisiera tener un archivo con todo el codigo que contiene un paquete especifico, como puedo hacerlo sin que queden separados por filas como quedan con el query a la ALL_SOURCE, sino como un archivo plano. gracias por tu respuesta.

    • Hola Tata, gracias por comunicarte, según lo que entiendo quieres dejar todo en contenido en una sola fila, bueno para eso debes hacer un cursor con el select a all_source e ir concatenado cada linea del código fuente, algo como lo siguiente:
      for lin in (select text from all_source) loop
      v_texto:= v_texto || lin.text;
      end loop;

      PD: Si te ha gustado lo que has visto del blog te invito a compartir el enlace http://dominatuspackagesenoracle.com/blog/ con tus amigos o personas que también les pueda interesar ver este contenido, gracias.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s