Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Funciones en Transact SQL
Funciones en Transact SQL
FUNCIONES EN SQL
Existen dos tipos de funciones:
o
Carcter
Nmero
Fecha
Conversin
Funciones de Caracteres
Pueden ser de dos tipos:
o
Funciones de conversin
De manipulacin de caracteres:
o
CONCAT
SUBSTR
LENGTH
INSTR
LPAD Y RPAD
De conversin:
o
minscula.
Bases de Datos II
Atencin: Usar una funcin de conversin dentro de la clusula WHERE puede ser
Funciones Numricas
ROUND (columna | expresin, n)
o
MOD (m, n)
o
SELECT ROUND(45.923,
FROM SYS.DUAL;
2),
ROUND(45.923,
0),
ROUND(45.923,
-1)
TRUNC(45.923,
-1)
Resultado: 45.92 46 50
SQL>
SELECT TRUNC(45.923,
FROM SYS.DUAL;
2),
TRUNC(45,923),
Resultado: 45.92 45 40
Bases de Datos II
SYSDATE.
ADD_MONTHS (fecha, n)
o
Bases de Datos II
11-JUL-94
19.6774194
08-SEP-95
30-SEP-95
01-AUG-95
01-JAN-96
01-JUL-95
01-JAN-95
MM / MONTH
o
DY / DAY
o
fm (fill mode)
o
HH / HH12 / HH24
MI / SS / SSSS
AM o PM
Se permiten literales
Bases de Datos II
De VARCHAR2 o CHAR
a NUMBER
De VARCHAR2 o CHAR
a DATE
De NUMBER
De DATE
a VARCHAR2
a VARCHAR2
9: Representa un nmero
$: Signo de dlar
Bases de Datos II
La Funcin DECODE
condicionales.
o
Uso de DECODE
SQL>SELECT job, sal,
Bases de Datos II
Funciones escalares.
Funciones en lnea.
Funciones en lnea de multiples sentencias
Funciones escalares
Las funciones escalares devuelven un nico valor de cualquier tipo de los datos tal como int,
money, varchar, real, etc.
La sintaxis para una funcin escalar es la siguiente:
Bases de Datos II
@Multiplicador DECIMAL(10,2)
)
RETURNS DECIMAL(10,2)
AS
BEGIN
DECLARE @Saldo DECIMAL(10,2),
@Return DECIMAL(10,2)
SELECT @Saldo = SALDO
FROM CUENTAS
WHERE NUMCUENTA = @NumCuenta
RETURN @Return
END
Pueden ser utilizadas en cualquier sentencia Transact SQL. Un aspecto a tener en cuenta, es que
para utilizar una funcin escalar debemos identificar el nombre de la funcin con el propietario de
la misma.
El siguiente ejemplo muestra como utilizar la funcin anteriormente creada en una sentencia
Transact SQL. Un aspecto muy a tener en cuenta es que la funcin ejecutar sus sentencias
SELECT una vez por cada fila del conjunto de resultados devuelto por la consulta SELECT principal.
SELECT IDCUENTA,
NUMCUENTA,
SALDO,
FXALTA,
Bases de Datos II
-- Ejecucion de la funcion:
Funciones en linea
Las funciones en linea son las funciones que devuelven un conjunto de resultados
correspondientes a la eecucin de una sentencia SELECT.
La sintaxis para una funcin de tabla en linea es la siguiente:
Bases de Datos II
AS
RETURN
(
-- Sentencia Transact SQL
)
El siguiente ejemplo muestra como crear una funcin en linea.
Bases de Datos II
SELECT *
FROM CUENTAS
INNER JOIN CUENTAS_CLIENTE
ON CUENTAS_CLIENTE.IDCUENTA = CUENTAS.IDCUENTA
INNER JOIN CLIENTES
ON CLIENTES.id = CUENTAS_CLIENTE.IDCLIENTE
INNER JOIN fn_MovimientosCuenta('200700000001') A
ON A.IDCUENTA= CUENTAS.IDCUENTA
Bases de Datos II
) AS
BEGIN
-- Sentencias que cargan de datos la tabla declarada
RETURN
END
El siguiente ejemplo muestra el uso de una funcion de tabla de multi sentencias.
Bases de Datos II
OPEN CDATOS
FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo
-- Recorremos el cursor
WHILE (@@FETCH_STATUS = 0)
BEGIN
-- Insertamos la cuenta en la variable de salida
INSERT INTO @datos
(NumCuenta, Saldo)
VALUES
(@numcuenta, @saldo)
-- Insertamos los tres ltimos movimientos de la cuenta
INSERT INTO @datos
Bases de Datos II
(Saldo_anterior, Saldo_posterior,
Importe_Movimiento, FxMovimiento )
SELECT TOP 3
SALDO_ANTERIOR, SALDO_POSTERIOR,
IMPORTE, FXMOVIMIENTO
FROM MOVIMIENTOS
WHERE IDCUENTA = @idcuenta
ORDER BY FXMOVIMIENTO DESC
-- Vamos a la siguiente cuenta
FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo
END
CLOSE CDATOS;
DEALLOCATE CDATOS;
RETURN
END
Para ejecutar la funcin:
Saldo
-----500.00
NULL
NULL
NULL
100.99
NULL
NULL
NULL
Saldo_anterior
--------------NULL
550.00
600.00
600.00
NULL
50.99
0.99
50.99
Saldo_posterior
---------------NULL
500.00
550.00
550.00
NULL
100.99
50.99
0.99
Importe_Movimiento
------------------NULL
50.00
50.00
50.00
NULL
50.00
50.00
50.00
FxMovimiento
----------------------NULL
2007-08-25 16:18:36.490
2007-08-23 16:20:41.183
2007-08-23 16:14:05.900
NULL
2007-08-25 16:18:36.490
2007-08-23 16:20:41.183
2007-08-23 16:16:29.840
Bases de Datos II
PRACTICA GUIADA:
Use northwind
go
1.Creacion de Funciones Escalares
CREATE FUNCTION Igv (@DATE money)
RETURNS money
AS
BEGIN
Declare @igv money
Set @Igv=@date*.18
Return(@igv)
END
3.Revisar la funcion debe de escribirse el nombre
con dos partes
Select unitprice, dbo.igv(unitprice) as igv
from [order details]
4.borrar la funcion
drop function igv
5.Otro ejemplo de funcion
CREATE Function Comision(@valor money)
ReturnS money
as
Begin
Declare @Resultado money
if @valor>=15
BEGIN
SET @RESULTADO= @VALOR * 1.10
END
ELSE
BEGIN
SET @RESULTADO=@VALOR
END
RETURN @RESULTADO
END
ejecutar la funcion
Bases de Datos II
Bases de Datos II