jun
1
2011

Procedimiento de búsqueda de un valor en las tablas de la BBDD

Descarga el contenido del Artículo en PDF Download PDF

Este procedimiento buscará un valor en las tablas de BBDD, excepto en la papelera de reciclaje, y devolverá en que tabla y columna se encuentra y las veces que se repite.

CREATE OR REPLACE PROCEDURE BUSQUEDA(CAMPO IN VARCHAR2)
IS
TOTAL NUMBER(9);
SELECT_COUNT VARCHAR2(512);
BEGIN
FOR C1 IN ( SELECT DISTINCT TABLE_NAME , COLUMN_NAME , DATA_TYPE
FROM USER_TAB_COLUMNS
WHERE DATA_TYPE IN (‘CHAR’,'NUMBER’,'VARCHAR2′)
AND TABLE_NAME NOT LIKE ‘BIN%’)
LOOP
TOTAL := 0;
IF C1.DATA_TYPE IN (‘CHAR’,'VARCHAR2′) THEN
SELECT_COUNT := ‘SELECT COUNT(*) FROM ‘ || C1.TABLE_NAME ||
‘ WHERE ‘ ||C1.COLUMN_NAME || ‘ LIKE ‘ ||
”” || ‘%’ || CAMPO || ‘%’ || ”” ;
EXECUTE IMMEDIATE SELECT_COUNT INTO TOTAL;
ELSE
SELECT_COUNT := ‘SELECT COUNT(*) FROM ‘ || C1.TABLE_NAME ||
‘ WHERE ‘ ||C1.COLUMN_NAME || ‘ = ‘ || CAMPO ;
EXECUTE IMMEDIATE SELECT_COUNT INTO TOTAL;
END IF;
IF TOTAL != 0 THEN
DBMS_OUTPUT.PUT_LINE(C1.TABLE_NAME || ‘.’ ||C1.COLUMN_NAME||’: ‘||TO_CHAR(TOTAL));
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1,150));
END;
/

set serveroutput on size 1000000
exec BUSQUEDA(’00000111′);

Resultado:

TABLA1.CDDNI: 12
TABLA2.CDDNI: 7
TABLA3.CDDNI: 1

Click on any of these buttons to help us to maintain this website.      
CJO

Artículos relacionados

6 Comments + Add Comment

  • me gusta, me gusta…

    • Gracias!!! Como anima que la gente te deje este tipo de comentarios!.

  • interesante.
    Hay que tratar de hacerlo para que soporte cualquier campo en la búsqueda.

    • Si, la verdad que podrías hacer muchas combinaciones, es lo bueno de Oracle.
      Aunque si le pasas un número no te dará error y buscará las coincidencias.

  • OTRA VERSION.

    CREATE OR REPLACE PROCEDURE PRC_BUSQUEDA2
    (
    pCAMPO IN VARCHAR2
    )
    IS
    TOTAL NUMBER(9) := 0;
    I NUMBER(5) := 0;

    BEGIN

    FOR C1 IN
    (
    SELECT DISTINCT
    TABLE_NAME ,
    COLUMN_NAME ,
    DATA_TYPE
    FROM
    USER_TAB_COLUMNS
    WHERE
    COLUMN_NAME LIKE UPPER(pCAMPO)
    AND DATA_TYPE IN ( ‘CHAR’, ‘NUMBER’, ‘VARCHAR2′)
    AND TABLE_NAME NOT LIKE ‘BIN%’
    )

    LOOP

    IF ( C1.DATA_TYPE IN (‘CHAR’,'VARCHAR2′)) THEN
    TOTAL := I + 1;
    ELSE
    TOTAL := I + 1;
    END IF;

    IF (TOTAL != 0) THEN
    DBMS_OUTPUT.PUT_LINE(C1.TABLE_NAME || ‘.’ ||C1.COLUMN_NAME||’ : ‘||TO_CHAR(TOTAL));
    END IF;

    END LOOP;

    EXCEPTION
    WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1,150));
    END;
    /

  • Gracias Rodrigo,
    Buen apunte!

Leave a comment


8 + = trece

Ayudas!

Recientes

  • Ber: Gracias Rodrigo, Buen apunte!
  • Rodrigo: OTRA VERSION. CREATE OR REPLACE PROCEDURE PRC_BUSQUEDA2 ( pCAMPO IN VARCHAR2 ) IS TOTAL NUMBER(9) := 0; I...
  • Olga: Si, la verdad que podrías hacer muchas combinaciones, es lo bueno de Oracle. Aunque si le pasas un número no te...
  • Rodrigo: interesante. Hay que tratar de hacerlo para que soporte cualquier campo en la búsqueda.
  • Ber: Hola, No lo recuerdo bien, pero ahí no lo utiliza, la función la copié-pegué de una aplicación que teniamos...