domingo, 26 de junio de 2016

Algunas Funciones Útiles, SQL...



Objetivos:
•Familiarizarse con Funciones Útiles en PL/SQL.
•Adquirir mas flexibilizad en el desarrollo de soluciones complejas.
_____________________________________________________________________________________
Función SIGN.
SIGN es una función numérica que determina el signo(Negativo; Positivo; Cero) del Número que recibe. Si el parámetro es menor que 0 retorna -1, si es 0 retorna 0 y si es mayor que 0 dicha función retorna 1.

Sintaxis:
SIGN(n)

Donde:
n es el numero a cual queremos determinar el Signo.

Ejemplo:
SELECT SIGN(-563) AS NEGATIVO,
       SIGN(0AS CERO,
       SIGN(100AS POSITIVO
FROM dual;
--OUTPUT: -1,0,1.
_____________________________________________________________________________________
Función POWER.
POWER es una función numérica que eleva un numero 'm' a la potencia de 'n'. La función recibe dos parámetros(m,n) y retorna 'm' elevado a la'n'.

Sintaxis:
POWER(m,n)

Donde:
m es la Base.
n es el Exponente.

Ejemplo:
SELECT POWER(6,2) CUATRADO,
       POWER(3,3) CUBO,
       POWER(5,4) "A LA 4TA"
FROM dual;
--OUTPUT: 36, 27, 625
_____________________________________________________________________________________
Función GREATEST.
GREATEST es una función que retorna el mayor valor de una lista de expresiones dada. Cabe destacar que aunque su uso es mas común con valores numéricos, dicha función recibe cualquier tipo de dato como parámetros, esto es debido a que la conversion se realiza en valores Binarios.

Detalles:
•Si las expresiones que recibe la función son de tipos de datos diferentes, todas las expresiones serán convertidas al tipo de dato de la primera expresión(si es posible).
•Si la primera es carácter, las siguientes expresiones(Números/Fechas) serán convertidas a carácter y luego comparadas.
•Si la primera es numérica, las siguientes expresiones deben ser numéricas ya que la conversion de (Caracteres /Fechas) a Número no es posible.
•Si la primera es una fecha, las siguientes expresiones deben ser de tipo fecha ya que la conversion de (Caracteres /Números) a Fecha no es posible.

Sintaxis:
GREATEST(expr1[, expr2, ... expr_n])

Donde:
expr1, expr2, ... exprn son las expresiones a ser evaluadas.

Ejemplos:
SELECT GREATEST(45,60,25,-689) números,
       GREATEST('HOLA MUNDO',-6,999,SYSDATE) caracteres,
       GREATEST(SYSDATE, TO_DATE('26/04/2017','DD/MM/YYYY')) fechas,
       GREATEST('HG',SYSDATEcarácter,
       GREATEST('HOLA MUNDO','hola mundo') "minúscula > MAYÚSCULA"
FROM dual;
/*Los resultados del Query anterior son los siguientes: 60, HOLA MUNDO, 26-APR-17, HG, hola mundo; la primera columna muestra '60', ya que es el mayor número; la 2da columna muestra 'HOLA MUNDO', ya que luego de convertir las demás expresiones a VARCHAR2 esta cadena resultó tener un mayor valor binario; la tercera muestra '26-APR-17', ya que es una fecha posterior a mi fecha actual; la 4ta muestra 'HG', ya que su valor binario es mayor al valor binario de mi fecha convertida a carácter; la 5ta muestra la cadena 'hola mundo', debido a que su correspondiente en mayúsculas tiene un menor valor binario.*/
_____________________________________________________________________________________
Función TRANSLATE.
TRANSLATE reemplaza una secuencia de caracteres en una cadena con otra secuencia de caracteres. Dicho reemplazo se realiza carácter por carácter de esta manera:

Sintaxis:
TRANSLATE( string, from_string, to_string)

Explicación
string es la cadena a traducir.
from_string es la secuencia de caracteres a ser reemplazada.
to_string es la secuencia de caracteres que se usará para reemplazar a from_string.

TRANSLATE retorna string con las ocurrencias de cada carácter en from_string reemplazado por su correspondiente en to_string. Los caracteres en string que no están en from_string no son tomados en cuenta. La cadena from_string puede ser mayor que to_string. Si es así, los caracteres extras al final de from_string no tienen correspondiente en to_string, y por esta razón, dichos caracteres son removidos en string(si string los contiene).

Ejemplos:
SELECT 
     TRANSLATE('12345MUNDO576893','231459786', 'OLHA ECUR') AS MUNDO,
     TRANSLATE('GRITAr, patear, sufRir','rGRIptesufai','RCANREIGOZ'AS GOZAR,
     TRANSLATE('¡Hoy es un_ dia GRANDE!!!','ANDeoy¡unia_HrGRE!s', 'dayaatWBIayGhoTo') AS "HOY"
FROM dual;
/*El OUTPUT y lógica de reemplazo del Query anterior:*/
/*Los caracteres en la parte de arriba(Este) se reemplazan por su equivalente en la parte de abajo(Por este); los que no tiene equivalentes y que pertenecen a la Cadena a traducir son eliminados; los caracteres de la Cadena a traducir que no se encuentren en los caracteres a reemplazar no sufren cambio.*/
_____________________________________________________________________________________
Función ASCIISTR.
ASCIISTR es una función que recibe como parámetro un cadena de caracteres con cualquier conjunto de caracteres(Character Set) y retorna la version ASCII de dicha cadena usando el conjunto de caracteres de la Base de Datos.

Sintaxis:
ASCIISTR ( string)

Donde:
string es la cadena a convertir a su version ASCII.

Ejemplo:
CREATE TABLE con_acento
( string_id NUMBER(4) CONSTRAINT pk_id PRIMARY KEY,
  string VARCHAR2(30CONSTRAINT n_null NOT NULL
      CONSTRAINT un_str UNIQUE
);
/*Creamos una tabla para nuestro ejemplo.*/
---
CREATE SEQUENCE sq
INCREMENT BY 1
CACHE 15;
/*Y también creamos una secuencia.*/
---
DESC con_acento;
---
INSERT INTO con_acento(string_id, string)
VALUES(sq.NEXTVAL,'¿Que?');
INSERT INTO con_acento(string_id, string)
VALUES(sq.NEXTVAL,'Asiático');
INSERT INTO con_acento(string_id, string)
VALUES(sq.NEXTVAL,'Avión');
INSERT INTO con_acento(string_id, string)
VALUES(sq.NEXTVAL,'Príncipe');
INSERT INTO con_acento(string_id, string)
VALUES(sq.NEXTVAL,'ñåño');
INSERT INTO con_acento(string_id, string)
VALUES(sq.NEXTVAL,'¡Wao!');
COMMIT;
/*Insertamos algunos textos con acento.*/
---
SELECT string AS texto,
       ASCIISTR(string) "Version ASCII"
FROM con_acento;
/*Acá vemos los resultados al aplicar la función ASCIISTR.*/
_____________________________________________________________________________________
Función UNISTR.
UNISTR es una función que convierte una cadena de caracteres en formato ASCII en texto Humano. Esta función podría entenderse como la inversa de ASCIISTR.

Sintaxis:
UNISTR (string)

Ejemplo:
CREATE TABLE texto_ascii
 AS SELECT string_id AS id_ascii,
           ASCIISTR(stringAS ascii
    FROM con_acento;
/*Creamos una tabla basada en el ejemplo anterior.*/
---
DESC texto_ascii;
---
SELECT ascii,
       UNISTR(ascii) AS "Texto"
FROM texto_ascii;
/*Acá Podemos ver como funciona la función UNISTR.*/
_____________________________________________________________________________________
Fuente: docs.oracle.com