lunes, 31 de marzo de 2014

Buscar texto en columnas de tablas Oracle PL/SQL

--Mediante Variable
--DROP PROCEDURE BUSCADOR;
CREATE OR REPLACE PROCEDURE BUSCADOR  IS
LV_QUERY VARCHAR2(1000);
TEXTO VARCHAR(200);
ENCONTRADOS NUMBER;

CURSOR BUSCATXT IS SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE
FROM ALL_TAB_COLUMNS 
WHERE OWNER='USUARIO' 
AND DATA_TYPE IN ('CHAR','VARCHAR2');

BEGIN
TEXTO:='TEXTO_A_BUSCAR';

FOR K IN BUSCATXT LOOP
LV_QUERY := 'SELECT COUNT(*) FROM'||K.OWNER||'.'||K.TABLE_NAME||' WHERE '||K.COLUMN_NAME||' LIKE ''%'||TEXTO||'%''';

EXECUTE IMMEDIATE LV_QUERY INTO ENCONTRADOS;

IF ENCONTRADOS>0 THEN
DBMS_OUTPUT.PUT_LINE(LV_QUERY);
END IF;
END LOOP;

END BUSCADOR;

--Mediante Parámetro
--DROP PROCEDURE BUSCADOR2;
CREATE OR REPLACE PROCEDURE BUSCADOR2 (LV_TXT VARCHAR2) IS
LV_QUERY VARCHAR2(1000);
ENCONTRADOS NUMBER;

CURSOR BUSCATXT IS SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_TYPE 
FROM ALL_TAB_COLUMNS 
WHERE OWNER='USUARIO2' 
AND DATA_TYPE IN ('CHAR','VARCHAR2');

BEGIN
--TEXTO:='TEXTO_A_BUSCAR';
FOR K IN BUSCATXT LOOP
LV_QUERY := 'SELECT COUNT(*) FROM '||K.OWNER||'.'||K.TABLE_NAME||' WHERE '||K.COLUMN_NAME||' LIKE ''%'||LV_TXT||'%''';

EXECUTE IMMEDIATE LV_QUERY INTO ENCONTRADOS;

IF ENCONTRADOS>0 THEN
DBMS_OUTPUT.PUT_LINE(LV_QUERY);
END IF;
END LOOP;

END BUSCADOR2;

--Mediante Query
SELECT owner,name,TYPE,line,text
FROM All_Source
WHERE LOWER (text) LIKE LOWER('%TEXTO_A_BUSCAR%')
AND OWNER='ESQUEMA';

jueves, 13 de marzo de 2014

FUNCIONES INTEGRADAS PL/SQL

SYSDATE
Devuelve la fecha del sistema.

SELECT SYSDATE
FROM DUAL;
--RETORNA: 13/03/2014 20:12:01

TO_DATE
Convierte una expresión al tipo DATE.

SELECT TO_DATE ('01/12/2014', 'DD/MM/YYYY')
FROM DUAL;
--RETORNA: 01/12/2014

Ahora con hora:
SELECT TO_DATE ('20/10/2014 00:00:01', 'DD/MM/YYYY HH24:MI:SS')
FROM DUAL;
--RETORNA: 20/10/2014 0:00:01

TO_CHAR
Convierte una expresión al tipo CHAR.

SELECT TO_CHAR (SYSDATE, 'DD/MM/YYYY')
FROM DUAL;
--RETORNA: 13/03/2014

SELECT TO_CHAR (SYSDATE, 'DAY/MONTH/YEAR')
FROM DUAL;
--RETORNA: JUEVES   /MARZO     /TWENTY FOURTEEN

TO_NUMBER
Convierte una expresion alfanumérica en numerica.

SELECT TO_NUMBER ('08')
FROM DUAL;
--RETORNA: 8

NVL
Devuelve el valor recibido como parámetro en el caso de que expresión sea nula.

SELECT COD_FACTURA, NVL (MONTO, 0) "MONTO"
FROM FACTURAS;
----RETORNA:
--50,20000
--51,34560
--52,30000
--53,45000
--54,10000
--55,22000


DECODE
Decode proporciona la funcionalidad de una sentencia de control de flujo if-else if-else.
El último valor asignado se toma como "ELSE"

SELECT DECODE(NUMERO,
1, 'ENERO',
2, 'FEBRERO',
3, 'MARZO',
4, 'ABRIL',
5, 'MAYO',
6, 'JUNIO',
7, 'JULIO',
8, 'AGOSTO',
9, 'SEPTIEMBRE',
10, 'OCTUBRE',
11, 'NOVIEMBRE',
12, 'DICIEMBRE',
'Mes no existe') MES
FROM MES
WHERE NUMERO=№
--RETORNA: SI ES 10= OCTUBRE

TRUNC
Solo borra fechas o numeros, no borra texto.

Si es una fecha  elimina las horas, minutos y segundos.
SELECT TRUNC(SYSDATE)
FROM DUAL;
--RETORNA: 13/03/2014

Si es una cantidad solo devuelve el entero.
SELECT TRUNC (201091.08)
FROM DUAL;
--RETORNA:201091

LENGTH
Devuelve la longitud de un tipo CHAR.

SELECT LENGTH ('VIVA SAPRISSA')
FROM DUAL;
--RETORNA: 13

INSTR
Busca una string de caracteres dentro de otra. Devuelve la posicion deL string buscado.

SELECT INSTR ('YO VIVO EN COSTA RICA',
              'RICA',
              1,
              1)
FROM DUAL;
--RETORNA: 18

REPLACE
Reemplaza un texto por otro texto.

SELECT REPLACE ('VIVA SAPRISSA', 'VIVA', 'VAMOS')
FROM DUAL;
--RETORNA: VAMOS SAPRISSA

SUBSTR
Obtiene una parte de una expresion, desde una posición específica y con una longitud determinada.

SELECT SUBSTR ('VIVA SAPRISSA', 5, 4)                          
FROM DUAL;
--RETORNA: SAP

UPPER
Convierte una expresion alfanumerica a mayúsculas.

SELECT UPPER ('viva saprissa')
FROM DUAL;
--RETORNA: VIVA SAPRISSA

LOWER
Convierte una expresion alfanumerica a minúsculas.

SELECT LOWER ('VIVA SAPRISSA')
FROM DUAL;
--RETORNA: viva saprissa


ROWIDTOCHAR
Convierte un ROWID a tipo caracter.

SELECT ROWIDTOCHAR(ROWID)
FROM DUAL;
--RETORNA: AAAAB0AABAAAAOhAAA

RPAD
Añade N veces una determinada cadena de caracteres a la derecha una expresión.

SELECT RPAD ('Costa Rica ',50, '*')
FROM DUAL;
--RETORNA: Costa Rica ***************************************

LPAD
Añade N veces una determinada cadena de caracteres a la izquierda de una expresión.

SELECT LPAD ('Costa Rica ', 50, '*')
FROM DUAL;
--RETORNA: ***************************************Costa Rica

RTRIM
Elimina los espacios en blanco a la derecha de una cadena.

SELECT RTRIM ('SANTIAGO DIAZ JIMENEZ    ')
FROM DUAL;
--RETORNA: SANTIAGO DIAZ JIMENEZ

LTRIM
Elimina los espacios en blanco a la izquierda de una cadena.

SELECT LTRIM ('       SANTIAGO DIAZ JIMENEZ')
FROM DUAL;
--RETORNA:SANTIAGO DIAZ JIMENEZ

TRIM
Elimina los espacios en blanco a la izquierda y derecha de una expresion

SELECT TRIM ('       SANTIAGO DIAZ JIMENEZ        ')
FROM DUAL;
--RETORNA: SANTIAGO DIAZ JIMENEZ