Anda di halaman 1dari 132

Universidad

Juárez Autónoma de Tabasco


División Académica de Informá;ca y Sistemas

Tutorial
Programación en Bases de Datos

Profesor
Dr. Herman Aguilar Mayo
herman_aguilar1@hotmail.com
www.hermanaguilar1.blogspot.com
Temario



Fundamentos

Funciones y Procedimientos

Paquetes y disparadores

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Temario


Fundamentos
•  Introducción
•  SQL dentro de PL/SQL
•  Diferencias y similitudes entre lenguajes de propósito
general y lenguajes de Base de Datos
•  Elementos del lenguaje

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Temario


Funciones y Procedimientos

•  Introducción
•  Estructura
•  Desarrollo de procedimientos
•  Parámetros
•  Eliminación de procedimientos
•  Cursores

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Temario


Paquetes y disparadores

•  Paquetes
•  Introducción
•  Creación de paquetes
•  Disparadores
•  Introducción
•  Habilitar y deshabilitar disparadores
•  Administración de disparadores
•  Creación de disparadores
•  Disparadores Before
•  Disparadores ASer

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Polí;cas

Evaluación
• 3 parciales (30% c/u)
• Par;cipación (10%)
• Exentos >=8.0 sobre parciales

Asistencia
• Reglamento

Laboratorio
• Cubrir cuota

Respeto a la clase y a los compañeros


Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Ejercicio

Realizar un programa en C / Java que lea dos números e


imprima la suma.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Ejercicio

Realizar una función en C / Java que reciba dos números y


regrese la suma.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Dato o Valor

Conjunto de caracteres con algún significado, pueden ser
numéricos, alfabé;cos, o alfanuméricos.

¿Cómo se puede obtener ?


Campo o variable Constante Expresión Función

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Información
Es un conjunto ordenado de datos los cuales son manejados
según la necesidad del usuario, para que un conjunto de datos
pueda ser procesado eficientemente y pueda dar lugar a
información, primero se debe guardar lógicamente en archivos.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Campo

Es la unidad más pequeña (atómica) a la cual uno puede


referirse en un programa. Desde el punto de vista del
programador representa una caracterís;ca de un individuo u
objeto.
Ejemplos: Folio Raza
Color
Matrícula
Existencia Apellido
Fecha
Marca Calificación
Nombres
Nombre

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Registro

Colección de campos de iguales o de diferentes ;pos. Desde el


punto de vista del programador representa una en;dad u
objeto.

Ejemplos: Cliente Boleto


Color Raza
Alumno
Tienda Taller
Libro
Marca Ciudad
Auto

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Archivo o Tabla

Colección de registros almacenados siguiendo una estructura


homogénea.
ANDRES EDUARDO CHAN MAGAÑA
ROSA MARÍA RUBIO DÍAZ
Ejemplos: DANIEL MATA HERNÁNDEZ
MARIANA ÁVALOS GARCÍA
5 COAHUILA
6 COLIMA C O M P U T A D O R A 6 9 9 0
7 CHIAPAS T E L E V I S O R L C D 5 7 9 5
T E L E V I S O R 1 9 9 5
V I D E O C A M A R A 2 7 9 0
MINICOMPONENTE 1995

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Base de Datos

Es una colección de archivos interrelacionados.


Creados con un DBMS.
Una finalidad de la base de datos es eliminar la redundancia o
al menos minimizarla.
Los tres componentes principales son
• SoSware DBMS
• Los datos
• Personal encargado del manejo del sistema.

Prueba ACID

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Base de Datos

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Sistema Manejador de Base de Datos


Data Base Management System DMBS
Un DBMS es una colección de numerosas ru;nas de soSware
interrelacionadas, cada una de las cuales es responsable de una
tarea específica.
El obje;vo primordial de un sistema manejador base de
datos es proporcionar un entorno que sea a la vez conveniente
y eficiente para ser u;lizado al extraer, almacenar y manipular
información de la base de datos. Todas las pe;ciones de acceso
a la base, se manejan centralizadamente por medio del DBMS,
por lo que este paquete funciona como interfaz entre los
usuarios y la base de datos.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

Base de Datos

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Marco Tecnológico
Bases de Datos

SQL ? Structured Query Language


Lenguaje Estructurado de Consulta

Es un lenguaje declara;vo de acceso a bases de datos


relacionales que permite especificar diversos ;pos de
operaciones en ellas. Una de sus caracterís;cas es el manejo del
álgebra y el cálculo relacional que permiten efectuar consultas
con el fin de recuperar de forma sencilla información de interés
de bases de datos, así como hacer cambios en ella.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Variable
Son espacios reservados en la memoria que, como su nombre
indica, pueden cambiar de contenido a lo largo de la ejecución
de un programa.

La nomenclatura es la misma en Oracle, que en cualquier
lengua de programación

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Comentarios
-- para una línea /* … */ bloque de líneas

Sintaxis
Palabras reservadas Obligatorias circunstanciales Opcionales
(): especificación
[]: opcional
| alguna de las opciones
‘ Apostrofo delimitador de cadenas de caracteres.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Conversión Implícita
10 + ‘5’ = ? 15

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Tipos de Datos
NUMBER (Numérico): Almacena números enteros o de punto
flotante, precisión máxima de 36.

-- NUMBER [(precisión, escala)]


Saldo NUMBER(16,2);
/* Indica que puede almacenar un valor numérico de 16
posiciones, 2 de ellas decimales. Es decir, 14 enteros
y dos decimales */

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Tipos de Datos
Varchar2 (Carácter de longitud variable): Almacena datos de gpo
carácter empleando sólo la cangdad necesaria aún cuando la
longitud máxima sea mayor. Máximo 4000

-- VARCHAR2 (longitud máxima)


nombre VARCHAR2(20);
/* Indica que puede almacenar valores alfanuméricos de hasta
20 posiciones */
/* Cuando la longitud de los datos sea menor de 20 no se
rellena con blancos */

‘JUAN ANTONIO’ ‘JUAN ANTONIO ’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Tipos de Datos
Date (longitud fija): Almacena fechas incluyendo año, mes, día,
hora, minutos y segundos. Se manejan como cadenas con
almacenamiento interno propio. Se puede hacer operaciones
sobre ellas.
-- Date
Fecha date;
/* Indica que puede almacenar fechas */

’05/02/2013’ ’05/feb/2013 14:22:55’

’05/02/2013’ +1 = ? ‘06/02/2013’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operaciones ¿Cuáles conoces?
Aritmé;cos

Boleanas

Lógicas

Cadenas
Fechas

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Aritmé;cos

+ Suma
- Resta
* Mul;plicación
/ División

Nota: el residuo está como función


Usar paréntesis para alterar la precedencia de los operadores

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Aritmé;cos con valores nulos

Valor null en base de datos significa ausencia de valor o que no


está definido.

10 + 0 = ? 10

10 + null = ? null

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Relacionales

= Igual
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
<> != Diferente o dis;nto

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Otros Relacionales en Oracle y Bases de Datos

Like
Determina si una cadena de caracteres coincide con un patrón
especificado.

Se usa % para el patrón

Valor like %patron%



Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Otros Relacionales en Oracle y Bases de Datos

IN
Permite determinar sin un valor está en una lista.

Calificacion in (6,7,8,9,10)

Más adelante se verá

Calificacion in (query)

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Otros Relacionales en Oracle y Bases de Datos

Between
Permite determinar sin un valor está en un rango.

Calificacion between 6 and 10

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Otros Relacionales en Oracle y Bases de Datos

Is null determina si un valor no está definido



marca is null

marca is not null

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Lógicos

And
Or
Not

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Cadenas

|| une dos valores de ;po cadena

‘Juan’||’López’ ? ‘JuanLópez’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

Operadores
Asignación

= en contexto de sql

:= en contexto de pl/sql

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Conceptos Básicos en Oracle

¿Qué es una condición?

¿Cómo se especifica una lista?

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Tip
¿En programación cuándo no usar punto y
coma?

En los encabezados de las estructuras

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
¿Cuáles estructuras conoces?
IF

For

While

Loop

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis IF
if condicion then
Sentencias

[else
Sentencias]
end if;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis IF - Ejemplo

if x>5 then
z := z +1 ;
y := z/2;
end if;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis IF - Ejemplo

if x>5 then
z := z +1 ;
y := z/2;
else
z := z +1 ;
y := z/2;
end if;
Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis For
for variable in valor_inicial..valor_final loop
[reverse]

sentencias;

end loop;
Notas:
La variable de control no se puede cambiar
El incremento es unitario
Usando reverse el ciclo se invierte

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis For - Ejemplo
for i in 1..10 loop

z := z+ i * 20;
end loop;
Notas:
Variable de control i
Valor inicial 1
Valor final 10
Ciclo del uno hasta 10

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis For - Ejemplo
for i in n..10 loop

z := z+ i * 20;
end loop;
Notas:
Variable de control i
Valor inicial n
Valor final 10
Ciclo desde n hasta 10

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis For - Ejemplo
for i in n..m loop

z := z+ i * 20;
end loop;
Notas:
Variable de control i
Valor inicial n
Valor final m
Ciclo desde n hasta m

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis For - Ejemplo
for i in reverse n..m loop

z := z+ i * 20;
end loop;
Notas:
Variable de control i
Valor inicial n
Valor final m
Ciclo en reversa desde m hasta el n

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis While
while condicion loop

sentencias;

end loop;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis While - Ejemplo
x:= 1;
while x < =10 loop

x := x +2;

end loop;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis loop
Loop
sentencias;
exit when condicion;
sentencias;
end loop;
Notas:
Puede haber varios exit when
El ciclo termina cuando la condición sea verdadera y
no se ejecutaran las sentencias entre exit y end loop

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis loop - Ejemplo
x := 1;
Loop
exit when x >10;
x := x +2;
end loop;
¿A que ciclo tradicional se parece ?
While

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis loop - Ejemplo
x := 1;
Loop
x := x +2;
exit when x >10;
end loop;
¿A que ciclo tradicional se parece ?
Do While

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Estructuras de Control
Sintaxis loop - Ejemplo
x := 1;
Loop
x := x +2;
exit when x >10;
y : = x *2;
exit when y >15;
z : = x +1;
end loop;
¿A que ciclo tradicional se parece ?
Ninguno

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones

Función?

Subprograma que realiza operaciones y que regresa un


valor
Elementos o caracterís;cas?
Nombre
Entrada (lista de parámetros)
Sentencias
Tipo de datos a regresar
Salida (un valor)

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones

Desde el punto de vista del usuario (programador)


¿Qué ;po de funciones hay?

Pre- Definidas (con el lenguaje)


Definidas (por el usuario)

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Predefinidas

En bases de datos para las funciones hay que tener en cuenta:

Las funciones se almacenan dentro de la base de datos.

No se requiere import o include.

Una vez creadas ya se pueden usar


No se ;ene acceso a disposi;vos E/S

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Predefinidas

Las podemos clasificar por su ;po de datos

Numéricas

Varchar

Date
Nulos
Otras

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Predefinidas

Sintaxis para usar una función

nombreFuncion[(parámetro1, parámetro2, parámetroN)]

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Predefinidas

¿Cómo usarlas?

Una vez definida, hacemos lo siguiente:

• Invocarla por su nombre


Pasarle los parámetros
• Contar con el dato a regresar

X := suma(5,10); P:=promedio(matricula);
Prin}(”%d”,suma(5,10)); P:=precio(producto_id);

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Predefinidas

¿Cómo usarlas?

Select matricula, promedio(matricula)


From alumnos

MATRICULA PROMEDIO
1 8.85
2 9.0
3 6.5
P:=promedio(matricula);

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Varchar

Lower(texto) Convierte un texto a minúsculas


lower(‘Programación en Bases de Datos’) ?
‘programación en bases de datos’

Upper(texto) Convierte un texto a mayúsculas


upper(‘Programación en Bases de Datos’) ?
‘PROGRAMACIÓN EN BASES DE DATOS’

Initcap(texto) Convierte un texto a palabras capital


initcap(‘Programación en Bases de Datos’) ?
‘Programación En Bases De Datos’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Varchar

RTrim(texto) Elimina espacios por la derecha


rtrim(‘ Programación en Bases de Datos ‘) ?
‘ Programación en Bases de Datos’

LTrim(texto) Elimina espacios por la izquierda


ltrim(‘ Programación en Bases de Datos ‘) ?
‘Programación en Bases de Datos ’

Trim(texto) Elimina espacios por ambos lados


trim(‘ Programación en Bases de Datos ’) ?
‘Programación en Bases de Datos’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Varchar

SubStr(texto,i[, n]) Ob;ene una subcadena tamaño n par;r de la


i n
posicion . Si se omite se retorna hasta encontrar el fin de la cadena

Substr(‘Programación en Bases de Datos’,1,12) ?
‘Programación’

Substr(‘Programación en Bases de Datos’,5,3) ?


‘ram’
Substr(‘Programación en Bases de Datos’,1) ?
‘Programación en Bases de Datos’
Substr(‘Programación en Bases de Datos’,26,30) ?
‘Datos’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Varchar

Length(texto) Ob;ene el tamaño de una cadena


Length(‘Programación’) ?
12

Length(‘Programación en Bases de Datos’) ?


30

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Varchar

InStr(texto,patron [,i [, n]]) Ob;ene la posición del patron


texto, se puede especificar una posición inicial i
dentro del para
empezar a buscar y la n aparición.

instr(‘Programación en Bases de Datos’,’en’) ?
14

instr(‘Programación en Bases de Datos’,’a’) ?


6
instr(‘Programación en Bases de Datos’,’a’,7) ?
8
instr(‘Programación en Bases de Datos’,’a’,7,3) ?
27

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Varchar

Replace(texto,patron, reemplazo) Reemplaza dentro del


texto cada aparición del patron por el reemplazo.

replace(‘Programación en Bases de Datos’,’a’,’x’) ?


‘Progrxmxción en Bxses de Dxtos’

replace(‘Programación en Bases de Datos’,’o’,’y’) ?


‘Prygramación en Bases de Datys’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Varchar

LPad(texto, longitud, relleno) Rellena el texto por la


izquierda con el relleno hasta alcanzar la longitud.

RPad(texto, longitud, relleno) Rellena el texto por la


derecha con el relleno hasta alcanzar la longitud.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Numéricas

Round(n [,decimales]) Redondea n con los decimales


indicados.

ROUND(8.239) ?
8

ROUND(8.239,2) ?
8.24

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Numéricas

Trunc(n [,decimales]) Corta n con los decimales indicados.


Trunc(8.239) ?
8

Trunc(8.239,2) ?
8.23

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Numéricas

Floor(n ) Obgene el entero igual o menor que n



Floor(8.239) ?
8

Floor(8) ?
8

Floor(8.99) ?

8

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Numéricas

Ceil(n ) Obgene el entero igual o mayor que n



Ceil(8.239) ?
9
Ceil(8) ?
8

Ceil(8.99) ?

9

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones Numéricas

Mod(n1,n2 ) Obgene residuo de dividir n1 entre n2



mod(10,2) ?
0
mod(10,3) ?
1

mod(10,null)

null

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Otras Funciones Numéricas

Función Descripción
POWER(valor,exponente) Eleva el valor al exponente indicado

SQRT(n) Calcula la raíz cuadrada de n


SIGN(n) Devuelve 1 si n es posi1vo, cero si vale cero y -1 si es negagvo

ABS(n) Calcula el valor absoluto de n


EXP(n) Calcula en, es decir el exponente en base e del número n
LN(n) Logaritmo neperiano de n
LOG(n) Logaritmo en base 10 de n
SIN(n) Calcula el seno de n (n 1ene que estar en radianes)
COS(n) Calcula el coseno de n (n 1ene que estar en radianes)
TAN(n) Calcula la tangente de n (n 1ene que estar en radianes)
ACOS(n) Devuelve en radianes el arcocoseno de n
ASIN(n) Devuelve en radianes el arcoseno de n
ATAN(n) Devuelve en radianes el arcotangente de n
SINH(n) Devuelve el seno hiperbólico de n
COSH(n) Devuelve el coseno hiperbólico de n
TANH(n) Devuelve la tangente hiperbólica de n
Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Fecha

Sysdate Ob;ene la fecha del servidor (máquina donde está


instalada la base de datos).

sysdate?
‘26/02/2013 10:12:15’

Considere el siguiente escenario:



En un estacionamiento se detectó, que un cobrador al momento de registrar la
salida de los vehículos en el sistema registraba menos horas que las u;lizadas,
pero sí cobraba completo a los clientes, quedándose con el importe del resto.
¿Cómo es posible que pueda burlar al sistema?

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Fecha

Add_Months( fecha, n) Suma n meses a la fecha.



Add_months(’01/03/2013’,12)
’01/03/2014’

Add_months(’28/02/2013’,36)
’29/02/2016’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Fecha

Months_between( fecha1, fecha2) Ob;ene la diferencia en


meses entre fecha1 y fecha2 .

months_between (‘30/03/2013', '01/03/2013' )
0.9677419354838709677419354838709677419355
months_between ('01/04/2013', '01/03/2013' )
1

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Fecha

Round( fecha [, formato]) Redondea una fecha a un formato.

‘YEAR’ año más cercano ‘HH24’ hora más cercano
‘MONTH’ mes más cercano ‘DAY’ día más cercano (default)

Round (‘01/07/2013 15:23:32', ‘YEAR’) ’01/01/2014’

Round (‘15/03/2013 15:23:32 ', ‘MONTH’) ’01/04/2013’

Round (‘01/03/2013 15:23:32 ', ‘DAY’) ’02/03/2013’

Round (‘01/03/2013 15:23:32 ', ‘HH24’) ’01/03/2013 15:00:00’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Fecha

Trunc( fecha [, formato]) Corta una fecha a un formato.

‘YEAR’ año actual ‘HH24’ hora actual
‘MONTH’ mes actual ‘DAY’ día actual (default)

Trunc(‘01/07/2013 15:23:32', ‘YEAR’) ’01/01/2013’

Trunc(‘15/03/2013 15:23:32 ', ‘MONTH’) ’01/03/2013’

Trunc(‘01/03/2013 15:23:32 ', ‘DAY’) ’01/03/2013’

Trunc(‘01/03/2013 15:23:32 ', ‘HH24’) ’01/03/2013 15:00:00’

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Nulos

NVl(valor1, valor2) Regresa valor1 si es no nulo, si no regresa valor2.

Nvl( 0 , 0) Nvl( null , 0)

0 0
Nvl( 0 , null) Nvl( null , null)

0 null

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Conversión

To_char( valor, ‘Formato’) Convierte el valor a varchar según el
formato especificado.

To_number( valor, ‘Formato’) Convierte el valor a number según


el formato especificado.

To_date( valor, ‘Formato’) Convierte el valor a Date según el


formato especificado.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Funciones de Conversión

Formato Descripción Formato Descripción
YY Año en 2 dígitos DDD Día del año en 3 dígitos

YYY Año en 3 dígitos HH24 Hora de 0 a 23

YYYY Año en 4 dígitos MI Minutos (0 a 59)

MM Mes del año en 2 dígitos SS Segundos (0 a 59)

MON Las tres primeras letras del SSSSS Segundos transcurridos desde la medianoche
nombre del mes
MONTH Nombre completo del mes AM / PM Indicador AM/PM

DY Las tres primeras letras del HH12 Hora de 1 a 12


día de la semana
DAY Nombre completo del día de /., Separadores
la semana
DD Día del mes en 2 dígitos

Q Semestre Los Formatos se pueden combinar


WW Semana del año Los Formatos que representan un nombre
D Día de la semana (del 1 al 7) siguen el orden de mayúsculas / minúsculas

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Sintaxis
create or replace func;on nombre (parametros) return ;po_dato is

[declaración de variables]
begin
sentencias;
return valor;
end;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Sintaxis
create or replace func;on nombre
(parametro1 in ;po_dato, parametro2 in ;po_dato, parametro in ;po_dato ) n
return ;po_dato is

[declaración de variables]
begin
sentencias;
return valor;
end;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Ejemplo
create or replace func;on suma (p_x in number, p_y in number ) return number is

v_z number :=0;

begin
v_z := p_x + p_y;
return v_z;
end;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Ejemplo SQL Developer
Nueva función

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Ejemplo SQL Developer
Llenando la pantalla

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Ejemplo SQL Developer
Pestaña DDL

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Ejemplo SQL Developer
¿Qué está mal?

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Ejemplo SQL Developer
Compilación correcta

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Funciones
Ejercicios
Especificación Solución Test Resultado
Suma(x,y) x + y Select suma(5,10) 15
From dual
Par(n) 1 si n%2 es igual a cero, 0 Select par(5) From dual 0
0-no 1-si en otro caso Select par(6) From dual 1
Factorial (n) n*(n-1)*(n-2)*...2*1 Select factorial(5) 120
From dual
Sumatoria(n) n+(n-1)+(n-2)+...2+1 Select sumatoria(5) 15
From dual
Primo(n) Es primo sí y sólo sí n Select primo(5) From dual 1
0-no 1-si solamente es divisible
entre el mismo y la unidad Select primo(6) From dual 0

Mcd(x,y) el número mayor que Select mcd(8,12) From dual 4


divide a ambos números Select mcd(8,9) From dual 1
Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select

DML Select
Sentencia para recuperar los datos de las tablas

Es la única sentencia para recuperar


Se puede usar dentro de PL/SQL
Hace proyecciones sobre los datos
Genera una tabla en memoria (ResultSet o Cursor)

La salida siempre será una tabla

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select

Convención del mismo significado

Select

Query

Consulta

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select

Partes más importantes de una consulta

Select: especifica las


columnas o valores a
seleccionar
From: el origen de los
datos

Where: especifica los


renglones o registros a
seleccionar

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select

Sintaxis SqlServer

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select

Sintaxis MySql

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select

Sintaxis Oracle

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select

Para hacer la sintaxis más sencilla, vamos a ver

Consultas Sencillas
De una tabla
Sin agrupaciones
Sin operaciones relacionales
Consultas Complejas
De varias tabla
Con agrupaciones
Con operaciones relacionales

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

Sintaxis por partes Select *


From tabla

* Selecciona todos los campos de la tabla

Consultar todos los campos de personas ?

Select * From personas

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

Select * From personas


PERSONA_I TELEFON FECHA_NACI
D RFC NOMBRE APEPAT APEMAT EMAIL O CALLE CASA MIENTO SEXO COLONIA_ID JEFE_ID

1 LUISA HERNÁNDEZ HERNÁNDEZ JUAREZ 23 30/12/1982 1 46


aleji@hotm
2 ALEJANDRA LOPEZ REYES ail.com 12345 11/02/1977 1 1978 1

3 ANDRES EDUARDO CHAN MAGAÑA 22/01/1982 2


GREGORIO
4 ROSA MARÍA RUBIO DÍAZ MÉNDEZ 4 08/08/1982 2 3

5 MAHD8301078E7 DANIEL MATA HERNÁNDEZ 07/01/1983 2 3431

6 AAGM852105X5T MARIANA ÁVALOS GARCÍA 12456 PINO SUÁREZ 14 21/05/1985 1 1837

7 GIAS821412G3A SILVIA GIL ÁLVAREZ 123568 14/12/1982 1 2449


cita@hotm
8 ZUMC802510G6U CARMELA ZURITA MARTÍNEZ ail.com ALLENDE ALTOS 25/10/1980 2 2443
reyh@hotm
9 AAPH802510H4T HÉCTOR ALVARADO PÉREZ ail.com 24567 05/05/1982 2 1320
jhd@hotma
10 VEGJ821605HTG JESÚS EDUARDO VELEZ GUTIÉRREZ il.com 16/05/1982 2 7943

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

Sintaxis por valores


Select valor1 [as alias], valor2 [ as alias], … , valorN [ as alias]
From tabla
El alias sirve para cambiarle el nombre al campo de salida

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

¿Cuál es la consulta de la siguiente tabla?
NOMBRE APEPAT APEMAT
LUISA HERNÁNDEZ HERNÁNDEZ
ALEJANDRA LOPEZ REYES
ANDRES EDUARDO CHAN MAGAÑA
ROSA MARÍA RUBIO DÍAZ
DANIEL MATA HERNÁNDEZ
MARIANA ÁVALOS GARCÍA
SILVIA GIL ÁLVAREZ
CARMELA ZURITA MARTÍNEZ
HÉCTOR ALVARADO PÉREZ
JESÚS EDUARDO VELEZ GUTIÉRREZ

Select nombre, apepat, apemat


from personas

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

¿Cuál es la consulta de la siguiente tabla?
NOMBRE
Daniel Mata Hernández
Luisa Hernández Hernández
Jesús Eduardo Velez Gugérrez
Rosa María Rubio Díaz
Alejandra Lopez Reyes
Mariana Ávalos García
Silvia Gil Álvarez
Carmela Zurita Mar~nez
Héctor Alvarado Pérez
Andres Eduardo Chan Magaña
select initcap(nombre||' '||apepat||' '||apemat) as nombre
from personas

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

Sintaxis con condición


Select valor1 [as alias], valor2 [ as alias], … , valorN [ as alias]
From tabla
[Where Condicion]

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

¿Cuál es la consulta de la siguiente tabla?
NOMBRE APEPAT APEMAT
ANDRES EDUARDO CHAN MAGAÑA
ROSA MARÍA RUBIO DÍAZ
DANIEL MATA HERNÁNDEZ
CARMELA ZURITA MARTÍNEZ
HÉCTOR ALVARADO PÉREZ
JESÚS EDUARDO VELEZ GUTIÉRREZ

Select nombre, apepat, apemat as nombre from personas


Where sexo =2

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

¿Cuál sería el resultado de la siguiente consulta?

Select nombre, precio


from productos
Where mod(existencia,3)=0;

El nombre y precio de todos los productos cuya existencia sea


múl;plo de 3

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Sencillas

¿Cuál sería el resultado de la siguiente consulta?

Select nombre
from municipios
Where nombre like ‘%A%A%’;

El nombre de todos los municipios cuyo nombre contenga dos


‘A’.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

Sintaxis múl;ples tablas
Select {*|valores }
From tabla1 [alias], tabla2 [alias],…, tablaN [alias]
[Where Condicion]

* Selecciona todos los campos de todas las tablas


Sí un campo es común, se debe colocar tabla.campo
Se ;ene acceso a todos los campos de todas las tablas tanto en
select como en where.
Podemos usar alias para las tablas, si es así, entonces debemos
referirnos a los campos por el alias y no por la tabla

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

Al consultar de varias tablas el resultado de la proyección
(registros) es:

Producto cartesiano entre todas las tablas


Se mul;plica la can;dad de registros de cada tabla

¿De qué tamaño es la proyección de la siguiente consulta?


Select *
From estados, municipios
Campos = estados (2) + municipios (3) =5
Registro= estados (12) * municipios (16) =192

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

Eliminando producto cartesiano ¿Cuál es el registro correcto?
ESTADO_ID NOMBRE MUNICIPIO_ID NOMBRE ESTADO_ID
5 COAHUILA 2 CÁRDENAS 27
6 COLIMA 2 CÁRDENAS 27
7 CHIAPAS 2 CÁRDENAS 27
8 CHIHUAHUA 2 CÁRDENAS 27
9 DISTRITO FEDERAL 2 CÁRDENAS 27
16 MICHOACÁN 2 CÁRDENAS 27
25 SINALOA 2 CÁRDENAS 27
26 SONORA 2 CÁRDENAS 27
27 TABASCO 2 CÁRDENAS 27
28 TAMAULIPAS 2 CÁRDENAS 27
29 TLAXCALA 2 CÁRDENAS 27
30 VERACRUZ 2 CÁRDENAS 27

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

Eliminando producto cartesiano ¿Cuál es el registro correcto?
ESTADO_ID NOMBRE MUNICIPIO_ID NOMBRE ESTADO_ID
5 COAHUILA 158 PICHUCALCO 7
6 COLIMA 158 PICHUCALCO 7
7 CHIAPAS 158 PICHUCALCO 7
8 CHIHUAHUA 158 PICHUCALCO 7
9 DISTRITO FEDERAL 158 PICHUCALCO 7
16 MICHOACÁN 158 PICHUCALCO 7
25 SINALOA 158 PICHUCALCO 7
26 SONORA 158 PICHUCALCO 7
27 TABASCO 158 PICHUCALCO 7
28 TAMAULIPAS 158 PICHUCALCO 7
29 TLAXCALA 158 PICHUCALCO 7
30 VERACRUZ 158 PICHUCALCO 7

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

Eliminando producto cartesiano ¿Cuál sería la condición?

Select *
From estados, municipios
Where ?

estados.estado_id = municipios.estado_id

Usando alias
Select *
From estados e, municipios m
Where e.estado_id = m.estado_id

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

Eliminando producto cartesiano, observando el modelo

¿Cuál es la relación entre las dos tablas?


Municipios.estado_id (ˆ) = estados.estado_id(pk)
Sólo se puede eliminar el producto cartesiano
siempre y cuando exista relación directa entre
las dos tablas.
Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

¿Cuál sería la consulta para la siguiente tabla?
NOMBRE ESTADO
Daniel Mata Hernández TABASCO
Luisa Hernández Hernández TABASCO
Jesús Eduardo Velez Gugérrez CHIAPAS
Alejandra Lopez Reyes TABASCO
Mariana Ávalos García TABASCO
Silvia Gil Álvarez TABASCO
Carmela Zurita Mar~nez TABASCO
Héctor Alvarado Pérez TABASCO


select initcap(p.nombre||' '||p.apepat||' '||p.apemat) as nombre,
e.nombre as estado
, colonias c, municipios m
from personas p, estados e
Where p.colonia_id = c.colonia_id
And c.municipio_id = m.municipio_id
And m.estado_id = e.estado_id
Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
Select - Complejas

Conclusión para eliminar producto cartesiano

Sólo se puede eliminar cuando exista relación directa o indirecta

Cuando exista relación indirecta se debe de colocar las tablas


intermediarias en el from y en el where las condiciones respec;vas

Cuando las llaves que relacionan las tablas sea simples podemos
recordar los siguiente:

n tablas en el from, n-1 condiciones en el where

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
PL con SQL

Es el mecanismo que permite obtener


datos de las tablas (SQL -select) y
depositarlos en las estructuras de datos
de PL.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
SELECT – INTO

Pasa cada uno de los campos de la tabla


de salida (select) a variables definidas
dentro de un bloque PL.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
SELECT - INTO
Sintaxis

Select valor1 , valor2 , … , valorN


Into variable1, variable2, …, variableN
From tablas
Where condicion
Cada uno de los valores de la tabla de salida son
pasados a las variables.
Debe de haber correspondencia
La tabla debe de tener uno y solo un registro

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
SELECT - INTO
Ejemplo

Select nombre, apepat, apemat, sexo, fecha_nacimiento


Into v_nombre, v_apepat, v_apemat, v_sexo, v_fecha_nacimiento
From alumnos
Where matricula = p_matricula;
Nombre Apepat Apemat Sexo Fecha_nacimiento
JUAN PEREZ LOPEZ 2 01/01/2000

V_NOMBRE V_APEPA V_APEMAT V_SEXO V_FECHA_NACIMIENTO


JUAN T LOPEZ 2 01/01/2000
PEREZ

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
FOR - SELECT

R e c o r r e c o n u n c i c l o f o r
automá;camente la tabla de salida.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
FOR - SELECT
Sintaxis

For registro in (sql) loop


sentencias;
End loop;

La tabla se recorre automá;camente.

Los datos se pueden acceder a través de registro.


No importa el número de registros.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
FOR - SELECT
Ejemplo

For reg in (select * from alumnos) loop


if reg.sexo=1 then
v_c := v_c +1;
end if;
End loop;

Cuenta cuantos alumnos son mujeres.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Procedimiento
Sintaxis
create or replace procedure nombre
(parametro1 in ;po_dato, parametro2 in ;po_dato, parametro in ;po_dato ) is n
--declaración de variables
begin
sentencias;
end;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Procedimiento
Ejemplo
create or replace procedure registrar_venta_producto
(p_venta_id in number, p_producto_id in number,
p_precio in number, p_can;dad in number, p_descuento in number ) is
v_existencia number :=0;
Begin
--validar existencia
select p.existencia into v_existencia
from productos p where p.producto_id = p_producto_id;
if v_existencia < p_can;dad then
raise_applica;on_error(-20000,'Existencia no válida');
end if;
--registrar venta
insert into ventas_productos (venta_id, producto_id, precio, can;dad, descuento) values
(p_venta_id, p_producto_id, p_precio, p_can;dad, p_descuento);
--actualizar existencia
update productos set existencia = existencia - p_can;dad
where producto_id = p_producto_id;

end;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Trigger
Definición
Es un bloque PL/SQL asociado a una tabla,
que se ejecuta automá;camente en una
determinada operación DML (INSERT,
UPDATE o DELETE) sobre dicha tabla.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Trigger
Configuración

Pueden definirse para las operaciones


INSERT, UPDATE o DELETE, y pueden
ejecutarse antes o después de la operación.
El modificador BEFORE AFTER indica que el
trigger se ejecutará antes o después de
ejecutarse la sentencia DML.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Trigger
Sintaxis
CREATE OR REPLACE TRIGGER nombre
{BEFORE|AFTER} {DELETE OR INSERT OR UPDATE }
ON tabla FOR EACH ROW
DECLARE -- variables
BEGIN
Sentencias;
END;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Trigger
Ejemplo

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Trigger
U;lización de :old y :new
Dentro del ambito de un trigger disponemos de las
variables OLD y NEW . Estas variables se u;lizan del
mismo modo que cualquier otra variable PL/SQL, con la
salvedad de que no es necesario declararlas, con;enen
una copia del registro antes (OLD) y después(NEW) de la
acción que ha ejecutado el trigger. U;lizando esta
variable podemos acceder a los datos que se están
insertando, actualizando o borrando.

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Trigger
U;lización de :old y :new

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Trigger
U;lización de predicados : INSERTING, UPDATING y DELETING

Como un trigger se puede ejecutar en cualquiera de las


tres operaciones DML, hay tres funciones booleanas que
pueden emplearse para determinar de qué operación se
trata. Estos predicados son INSERTING, UPDATING y
DELETING.
If inser;ng then …

If upda;ng then …

If dele;ng then …

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Provocar un error
Sintaxis

raise_applica;on_error(numero,mensaje);

De;ene la ejecución de un bloque PL


Aplica Rollback a todas las operaciones de la transacción
Normalmente se usa con un IF
El numero puede ser personalizable entre -20000..- 30000
El mensaje es un texto que la aplicación que invoca,
recibe como error

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Provocar un error
Ejemplo

if v_existencia < p_can;dad then


raise_applica;on_error(-20000,'Existencia no válida');
end if;

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo
Bases de Datos
PL / SQL
Modelo Ventas Tercer Parcial

Tutorial de Programación en Bases de Datos UJAT - DAIS Profesor Dr. Herman Aguilar Mayo

Anda mungkin juga menyukai