La empresa sostenible: Principales Características, Barreras para su Avance y...
Funciones
1. Bases de Datos
Unidad
El Lenguaje PL/SQL
(Funciones)
2011 Erwin Fischer 2
2. Funciones
• Uso de funciones de conversión
y expresiones de condicionales
2011 Erwin Fischer 3
3. Usando la tabla dual de
Oracle
• La tabla dual de Oracle se utiliza
cuando se necesita ejecutar una
instrucción SQL que no
necesariamente tiene una tabla
asociada.
• Select user from dual;
2011 Erwin Fischer 5
4. Usando dual
• select sysdate from dual;
• ¿Qué día de la semana nació
usted?
select
to_char(to_date(‘09-SEP-1958','dd-mon-
yyyy'),'day')
from dual;
2011 Erwin Fischer 6
5. Recordando %TYPE
create procedure update_emp (empid in number)
is
v_empid number;
v_fname varchar2(20);
v_lname varchar2(30);
v_hire date;
v_sal number;
begin
-- Proceso de registros
end;
2011 Erwin Fischer 7
6. Recordando %TYPE
create procedure update_emp (empid in number)
is
v_empid employees.employee_id%type;
v_fname employees.first_name%type;
v_lname employees.last_name%type;
v_hire employees.hire_date%type;
v_sal employees.salary%type;
begin
--Proceso de registros
end;
2011 Erwin Fischer 8
7. En Proceso de registros
begin
select employee_id,first_name,
last_name, hire_date, salary
into v_empid, v_fname,
v_lname, v_hire, v_sal
from employees
where employee_id = empid;
--continuar el proceso…
end;
2011 Erwin Fischer 9
8. Declarando un tipo RECORD
create procedure update_emp (empid in number) is
--declare
TYPE emp_record_type IS RECORD
(v_empid employees.employee_id%type;
v_fname employees.first_name%type;
v_lname employees.last_name%type;
v_hire employees.hire_date%type;
v_sal employees.salary%type;
);
--instantiate
emp_record emp_record_type;
begin ...
2011 Erwin Fischer 10
9. Finalmente tenemos
Begin
select employee_id,
first_name, last_name,
hire_date, salary
into emp_record
from employees
where employee_id = empid;
-- continuar el proceso…
end;
2011 Erwin Fischer 11
10. Creando tablas para
pruebas
create table tx (x int,y varchar(5));
insert into tx
select rownum,
trunc(dbms_random.value(1,99999))
from dual
connect by rownum <= 10;
select * from tx;
2011 Erwin Fischer 12
11. FUNCIONES DE CONVERSIÓN
TO_CHAR:
Transforma un tipo DATE ó NUMBER en una cadena de
caracteres. Ejemplos:
to_char(45.31, '99.9') retorna '45.3'
to_char(9,125.33, '9,999.99') retorna '9,125.33'
to_char(77, '0099') retorna '0077'
TO_DATE:
Transforma un tipo NUMBER ó CHAR en DATE.
Ejemplo:
to_date('31/10/2007','DD/MM/YYYY„) retorna „31/10/2007‟
TO_NUMBER:
Transforma una cadena de caracteres en NUMBER.
Ejemplo:
to_number('123') retorna 123
2011 Erwin Fischer 13
12. FUNCIONES QUE DEVUELVEN VALORES
NUMÉRICOS
ASCII(cad)= Devuelve el valor ASCII de la primera letra
de la cadena "cad". Ejemplo:
ASCII('R') Retorna 82
INSTR (cad1, cad2 [, comienzo [,m]])= Permite una
búsqueda de un conjunto de caracteres en una cadena
pero no suprime ningún carácter después. Ejemplo:
INSTR('CORPORATE FLOOR','OR', 3, 2) El resultado obtenido
es 14, busca la segunda ocurrencia de la cadena OR a partir de
la tercer posición
LENGTH (cad)= Devuelve el numero de caracteres de cad.
Ejemplo:
LENGTH(„HOLA‟) retorna 4
2011 Erwin Fischer 14
13. Ejemplos
select 'R=',ASCII('R'), 'r=', ASCII('r')
from dual;
select INSTR('CORPORATE FLOOR','OR', 3, 2)
from dual;
select LENGTH ('HOLA nundo')
from dual;
2011 Erwin Fischer 15
14. FUNCIONES PARA EL MANEJO DE
FECHAS
SYSDATE= Devuelve la fecha del sistema.
ADD_MONTHS (fecha, n)= Devuelve la fecha "fecha"
incrementada en "n" meses.
LAST_DAY (fecha)= Devuelve la fecha del último día del
mes que contiene "fecha".
MONTHS_BETWEEN (fecha1, fecha2)= Devuelve la
diferencia en meses entre las fechas "fecha1" y "fecha2".
NEXT_DAY (fecha, “cad”= Devuelve la fecha del primer
día de la semana indicado por "cad" después de la fecha
indicada por "fecha“, donde cad corresponde al día de la
semana EJ: „sábado’
2011 Erwin Fischer 16
15. Ejemplos de Funciones para el manejo
de fechas
select sysdate
from dual;
select sysdate, add_months(sysdate, 3)
from dual;
select sysdate, last_day(sysdate)
from dual;
select months_between(sysdate, '1/1/2011')
from dual;
select next_day(sysdate,'sábado')
from dual;
2011 Erwin Fischer 17
16. FUNCIONES QUE DEVUELVEN
VALORES DE CARACTERES
CHR(n) = Devuelve el carácter cuyo valor en binario es
equivalente a "n".
CONCAT (cad1, cad2)= Devuelve "cad1" concatenada
con "cad2".
LOWER (cad)= Devuelve la cadena "cad" en minúsculas.
UPPER (cad)= Devuelve la cadena "cad" en mayúsculas.
INITCAP (cad)= Convierte la cadena "cad" a tipo titulo.
LPAD (cad1, n[,cad2])= Añade caracteres a la izquierda
de la cadena hasta que tiene una cierta longitud.
RPAD (cad1, n[,cad2])= Añade caracteres a la derecha
de la cadena hasta que tiene una cierta longitud.
2011 Erwin Fischer 18
17. FUNCIONES QUE DEVUELVEN
VALORES DE CARACTERES
LTRIM (cad [,set])= Suprime un conjunto de caracteres
a la izquierda de la cadena.
RTRIM (cad [,set])= Suprime un conjunto de caracteres
a la derecha de la cadena.
REPLACE (cad, cadena_busqueda [,
cadena_sustitucion])= Sustituye un carácter o
caracteres de una cadena con 0 o más caracteres.
SUBSTR (cad, m [,n])= Obtiene parte de una cadena.
TRANSLATE (cad1, cad2, cad3)= Convierte caracteres
de una cadena en caracteres diferentes, según un plan de
sustitución marcado por el usuario.
2011 Erwin Fischer 19
19. FUNCIONES DE GRUPOS DE
VALORES
AVG(n)= Calcula el valor medio de "n" ignorando los valores
nulos.
COUNT (* | Expresión)= Cuenta el número de veces que la
expresión evalúa algún dato con valor no nulo. La opción "*"
cuenta todas las filas seleccionadas.
MAX (expresión)= Calcula el máximo.
MIN (expresión)= Calcula el mínimo.
SUM (expresión)= Obtiene la suma de los valores de la
expresión.
GREATEST (valor1, valor2…)= Obtiene el mayor valor de la
lista.
LEAST (valor1, valor2…)= Obtiene el menor valor de la lista.
2011 Erwin Fischer 21
20. ejemplos
select greatest(20, 10, 7, 5)
from dual
select least(20, 10, 7, 5)
from dual
select max(salary)
from employees
select COUNT (*)
from employees
select sum(salary)
from employees
2011 Erwin Fischer 22
21. FUNCIONES DE VALORES SIMPLES
ABS(n)= Devuelve el valor absoluto de (n).
CEIL(n)=Obtiene el valor entero inmediatamente superior
o igual a "n".
FLOOR(n) = Devuelve el valor entero inmediatamente
inferior o igual a "n".
MOD (m, n)= Devuelve el resto resultante de dividir "m"
entre "n".
NVL (valor, expresión)= Sustituye un valor nulo por otro
valor.
POWER (m, exponente)= Calcula la potencia de un
numero.
2011 Erwin Fischer 23
22. Ej:
select ceil(23.56)
from dual
select floor(23.56)
from dual
select mod(25,2)
from dual
select power(2,3)
from dual
select NVL(commission, 0)
from sales;
2011 Erwin Fischer 24
23. FUNCIONES DE VALORES
SIMPLES
ROUND (numero [, m])= Redondea números con el
numero de dígitos de precisión indicados.
SIGN (valor)= Indica el signo del "valor".
SQRT(n)= Devuelve la raíz cuadrada de "n".
TRUNC (numero, [m])= Trunca números para que tengan
una cierta cantidad de dígitos de precisión.
VARIANCE (valor)= Devuelve la varianza de un conjunto
de valores.
2011 Erwin Fischer 25
24. select ROUND (123.345, 2)
from dual
select SIGN (-35.27)
from dual
select SQRT(16)
from dual
select TRUNC (123.345, 2)
from dual
select VARIANCE (salary)
from employees
2011 Erwin Fischer 26
25. FUNCIONES AVANZADAS
DECODE(expr, value1 [, return1, value2, return2....,]
default ):
Traduce una expresión a un valor de retorno. Si expr es
igual a value1, la función devuelve Return1. Si expr es
igual a value2, la función devuelve Return2. Y así
sucesivamente. Si expr no es igual a ningún valor la
función devuelve el valor por defecto.
2011 Erwin Fischer 27
27. FUNCIONES AVANZADAS
CASE: La expresión CASE permite utilizar la lógica IF-
THEN-ELSE en sentencias SQL sin tener que invocar
procedimientos.
CASE expr
WHEN comparison_expr1 THEN return_expr1
[ WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr ]
END
2011 Erwin Fischer 29
28. EJ:
select SALARY,
CASE
WHEN SALARY < 4000 THEN ‘GANA POCO'
WHEN sALARY >= 4000 AND SALARY < 5000 THEN ‘GANA BIEN'
ELSE 'GANA MUCHO'
END
from EMPLOYEES;
2011 Erwin Fischer 30
29. FUNCIONES
CREATE [OR REPLACE] FUNCTION function_name
[ (parameter [,parameter]) ]
RETURN return_datatype
IS | AS
[declaration_section]
BEGIN
executable_section
[EXCEPTION
exception_section]
END [function_name];
2011 Erwin Fischer 31
31. Tarea : Cree la función
ParImpar
Escriba una función que reciba un numero entero y
Retorne un texto indicando si es „par‟ o „impar‟
2011 Erwin Fischer 33