8/10/2019 PlSQL - Oracle10g
1/78
8/10/2019 PlSQL - Oracle10g
2/78
Agenda
Repaso general PL/SQL Tratamiento de Excepciones
Ejercicios Prcticos (Cursores y Excepciones)
Procedimientos almacenados
Funciones Paquetes
Repaso General
17/11/2014
2
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
3/78
PL/SQL
PL/SQL es el lenguaje de programacin que proporcpara extender el SQL estndar con otro tipo de esinstrucciones
Variables y tipos
Estructuras de control Bucles y sentencias IFTHENELSE
Procedimientos y funciones
Tipos de objetos y mtodos
17/11/2014
3
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
4/78
PL/SQL
PL/SQL permite: Manipular los datos de la BD
Manejar errores
Definidos por el usuario (excepciones)
Propios del sistema (predefinidos) La unidad bsica de cualquier programa PL/SQL es el b
Cada bloque realiza una unidad lgica de trabajo en separando as unas tareas de otras.
17/11/2014
4
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
5/78
PL/SQL (variables)
Las variables deben declararse dentro de la seccin DECLdeben seguir la siguiente sintaxis:
Nombre_variableTIPO [NOT NULL] [:= inicializac
Ejemplos:
Interes NUMBER(5,3); Descripcion VARCHAR2(50) := 'inicial';
Fecha_max DATE;
Contabilizado BOOLEAN := TRUE;
17/11/2014
5
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
6/78
n ra a y a a edatos)
17/11/2014Curso de Oracle 10g
6
DECLAREv_fecha DATE:='&fecha';edad number:=&edad;
BEGIN
DBMS_OUTPUT.PUT_LINE('La fecha introes: '||TO_CHAR(v_fecha));dbms_output.put_line('Edad: '
||TO_NUMBER(edad));
END;
8/10/2019 PlSQL - Oracle10g
7/78
PL/SQL (Estructura bsica de ubloque)
DECLARE/* Declaracin de uso local: variables, cursores,
excepciones de usuario, */
BEGIN
/* Seccin ejecutable (obligatoria): rdenes SQL y
procedimentales */
EXCEPTION
/* Zona de control de errores */
END;
17/11/2014
7
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
8/78
PL/SQL (Estructuras de Co
Realizan el control del comportamiento del bloque. Tipos:
Condicionales (IF)
Bucles
Los bucles permiten repetir un nmero de vecconjunto de instrucciones PL/SQL.
Para romper el bucle se usa EXIT, GOTO o R
17/11/2014
8
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
9/78
PL/SQL (Estructuras de Co
Condicional IF: Ejecuta una o varias sentencias depenuna condicin
Ejemplo:
IF fecha_nac != 1-01-1970 THEN
IFapellido =Martnez THEN
salario:= salario *1.15;
END IF;
END IF;
17/11/2014
9
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
10/78
PL/SQL (Estructuras de Co
BUCLES Bucles simples (LOOP).
Bucles condicionales (WHILE)
Bucles numricos (FOR)
17/11/2014
10
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
11/78
PL/SQL (Estructuras de Co
Bucles simples (LOOP): Se repite tantas veces como necesario hasta que se fuerza su salida con la instrucci
Sintaxis:LOOP
-- Instrucciones
IF(expresion) THEN
-- Instrucciones
EXIT;
END IF;
END LOOP; 17/11/2014
11
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
12/78
PL/SQL (Estructuras de Co
SET SERVEROUTPUT ONDECLARE
v_contador number:=1;
BEGIN
LOOP
dbms_output.put_line(v_contador);v_contador:=v_contador+1;
EXIT WHEN v_contador>50;
END LOOP;
END;
17/11/2014
12
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
13/78
PL/SQL (Estructuras de Co
BUCLES CONDICIONALES (WHILE) La condicin se evala antes de entrar en el bucle
Sintaxis
WHILE condicin
LOOPsentencias;
END LOOP;
17/11/2014
13
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
14/78
PL/SQL (Estructuras de Co
BUCLES CONDICIONALES (WHILE)DECLARE
v_contador number:=1;
BEGIN
WHILE v_contador
8/10/2019 PlSQL - Oracle10g
15/78
PL/SQL (Estructuras de Co
El bucle FOR, se repite tanta veces como le indiquemoidentificadores inicioy final.
FORcontador INinicio..final LOOP
-- Instrucciones
END LOOP;
17/11/2014
15
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
16/78
PL/SQL (Estructuras de Co
DECLAREnumero number(2):=5;
producto number(2):=1;
BEGIN
FOR i in 1..10 LOOP
producto:= numero * i;
dbms_output.put_line(producto);
END LOOP;
END;
17/11/2014
16
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
17/78
PL/SQL (Cursores)
tiles para gestionar grandes cantidades de d Esta formado por un conjunto de registros dev
una instruccin SQL de tipo SELECT.
Son segmentos de memoria utilizados pa
operaciones con las filas de datos recuperado Puede ser de dos tipos: IMPLICITOS y EXPLI
17/11/2014
17
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
18/78
PL/SQL (Cursores - Implci
Un cursor implcito es aquel que devuelve unacomo dato.
La sentencia SELECT INTO es un ejemploimplcito
El cursor implcito debe retornar siempre registro.
Si esa condicin no se cumple, se producir(excepcin)
17/11/2014
18
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
19/78
PL/SQL (Cursores - Implci
DECLAREv_nombre varchar2(50);
BEGIN
selectnombre into v_nombre
fromalumnowhere id_alumno=3;
dbms_output.put_line('estudiante '||v_nombre);
END;17/11/2014
19
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
20/78
PL/SQL (Cursores - Implci
DECLAREvar1 alumno%rowtype;
BEGIN
select* intovar1
from alumnowhere ID_ALUMNO=1;
dbms_output.put_line('nombre: '||var1.nombre||' apellido:'||var1.apellido);
END;17/11/2014
20
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
21/78
PL/SQL (C E l it
8/10/2019 PlSQL - Oracle10g
22/78
PL/SQL (Cursores ExplcitosSINTAXIS)
Para declarar un cursor: Simple: CURSOR IS
Con parmetros: CURSOR (param1 tipo1, param2 tipo2
param n tipo n) IS
17/11/2014
22
PL/SQL (Cursores Explcitos
8/10/2019 PlSQL - Oracle10g
23/78
PL/SQL (Cursores ExplcitosSINTAXIS)
Para abrir un cursor: Simple: OPEN nombre_cursor;
Con parmetros: OPEN nombre_cursor (valor1, valor2, ., valor n);
17/11/2014
23
SPL/SQL (Cursores Explcitos
8/10/2019 PlSQL - Oracle10g
24/78
SPL/SQL (Cursores ExplcitosSINTAXIS)
Para extraer datos de un cursor: Con variables: FETCH nombre_cursor INTOlista_variables;
Con registro PL/SQL: FETCH nombre_cursor INTOregistro_PL/SQL;
17/11/2014
24
PL/SQL (Cursores Explcitos
8/10/2019 PlSQL - Oracle10g
25/78
PL/SQL (Cursores ExplcitosSINTAXIS)
Para cerrar un cursor: CLOSE nombre_cursor;
17/11/2014
25
8/10/2019 PlSQL - Oracle10g
26/78
CURSORES
Con los atributos de los cursores se permite reconocede un cursor
%NOTFOUND: Devuelve verdadero cuando el cursorun registro
%FOUND: Devuelve verdadero cuando el cursor
registro %ISOPEN: Devuelve verdadero mientras el cursor est %ROWCOUNT: Devuelve la cantidad de registros
recuperado hasta el momento
17/11/2014
26
8/10/2019 PlSQL - Oracle10g
27/78
PL/SQL (Cursores - ExplciDECLARE
CURSOR calumno IS
select * from alumno;
reg_alumno alumno%rowtype;
BEGIN
OPEN calumno;
LOOPFETCH calumno INTO reg_alumno;
EXIT when calumno%notfound;
dbms_output.put_line(reg_alumno.nombre);
END LOOP;
CLOSE calumno;
END; 17/11/2014
27
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
28/78
PL/SQL (Cursores - Explci
CONSIDERACIONES A TENER EN CUENTA Cuando un cursor est cerrado, no puede retornar re
general, los atributos tampoco pueden ser utilizad%ISOPEN)
No se puede cerrar un cursor que ya est cerrado
Es conveniente consultar el resultado de una extraccilos atributos del cursor (%NOTFOUND, %FOUND)
Al terminar de usar un cursor, es recomendable cerrarloespacio de memoria y dejarlo disponible para el SGBD
17/11/2014
28
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
29/78
PL/SQL (Cursores - Explci
OTRAS FORMAS DE CURSORES EXPLCITOS Se puede utilizar una estructura de ciclo FOR, para
resultado de un cursor
De la forma anterior, se ejecutan implcitainstrucciones OPEN, FETCH y CLOSE
Uno de los puntos en contra respecto a esta modalel cursor no tiene nombre, y por lo tanto, su resultadser capturado por una aplicacin externa a Oracle pasus datos (ej. .NET, Java)
17/11/2014
29
Curso de Oracle 10g
8/10/2019 PlSQL - Oracle10g
30/78
17/11/2014Curso de Oracle 10g
30
DECLARE
CURSOR curalumno ISselect * from alumno;reg_alumno alumno%rowtype;
BEGINFOR reg_alumno in curalumno
LOOPdbms_output.put_line(reg_alumno.nombre);
END LOOP;END;
8/10/2019 PlSQL - Oracle10g
31/78
PL/SQL (Excepciones)
17/11/2014Curso de Oracle 10g
31
Permite responder ante cualquier problepueda ocurrir en la ejecucin de coperacin
La ejecucin de la aplicacin fin
presentarse algn error grave. Mediante el manejo de excepciones es
realizar una serie de acciones y conejecucin de la aplicacin.
8/10/2019 PlSQL - Oracle10g
32/78
PL/SQL (Excepciones: Sinta
17/11/2014Curso de Oracle 10g
32
DECLARE-- DeclaracionesBEGIN
-- EjecucionEXCEPTION-- ExcepcionEND;
xcepc ones
8/10/2019 PlSQL - Oracle10g
33/78
xcepc onespredefinidas)
17/11/2014Curso de Oracle 10g
33
NO_DATA_FOUND, TOO_MANY_ROWS Ocurren cuando un select no selecciona nada o
varias filas cuando solo se esperaba una INVALID_NUMBER, VALUE_ERROR, ZERO
Se producen por operaciones invalidas de tratamnmeros
DUP_VAL_ON_INDEX Se produce cuando se intenta insertar una clave
duplicada.
xcepc ones
8/10/2019 PlSQL - Oracle10g
34/78
xcepc onespredefinidas)
17/11/2014Curso de Oracle 10g
34
CURSOR_ALREADY_OPEN Ocurre al intentar abrir un cursor ya abierto
INVALID_CURSOR Ocurre al intentar hacer una operacin inval
un cursor PROGRAM_ERROR, STORAGE_ERRO
TIMEOUT_ON_RESOURCE Detectan errores de almacenamiento o de ej
8/10/2019 PlSQL - Oracle10g
35/78
8/10/2019 PlSQL - Oracle10g
36/78
EjemploDECLARE
v_nombre varchar2(50);BEGIN
select nombre intov_nombre
from alumno;bms_output.put_line('estudiante '||v_nombre);END;
DECLARE
v_nombre varchar2(50);BEGIN
select nombre into v_nom
from alumno;
dbms_output.put_line('es'||v_nombre);
EXCEPTIONWHEN TOO_MANY_ROW
DBMS_OUTPUT.PUT_LSE HAN SELECCIONADOREGISTRADO');
END;17/11/2014
36
Curso de Oracle 10g
Excepciones definidas por lo
8/10/2019 PlSQL - Oracle10g
37/78
Excepciones definidas por lousuarios
17/11/2014Curso de Oracle 10g
37
PL/SQL permite al usuario definir susexcepciones, las que debern ser declalanzadas explcitamente utilizando la sRAISE.
Las excepciones deben ser declarada
segmento DECLAREde un bloque, subpo paquete. Se declara una excepcicualquier otra variable, asignndole EXCEPTION. Las mismas reglas de aplican tanto sobre variables como s
excepciones
8/10/2019 PlSQL - Oracle10g
38/78
Sintaxis
17/11/2014Curso de Oracle 10g
38
DECLARE-- DeclaracionesMyExcepcion EXCEPTION;
BEGIN-- Ejecucion
EXCEPTION-- Excepcion
END;
8/10/2019 PlSQL - Oracle10g
39/78
17/11/2014Curso de Oracle 10g
39
REGLAS DE ALCANCE Una excepcin es vlida dentro de su mbito de alca
decir el bloque o programa donde ha sido declarada. excepciones predefinidas son siempre vlidas.
Como las variables, una excepcin declarada en un blocal a ese bloque y global a todos los sub-bloques q
comprende. LA SENTENCIA RAISE
La sentencia RAISEpermite lanzar una excepcin enexplcita. Es posible utilizar esta sentencia en cualquque se encuentre dentro del alcance de la excepcin
8/10/2019 PlSQL - Oracle10g
40/78
17/11/2014Curso de Oracle 10g
40
DECLARE
VALOR_NEGATIVO EXCEPTION;valor NUMBER;
BEGIN
valor := -1;
IF valor < 0 THEN
RAISE VALOR_NEGATIVO;
END IF;dbms_output.put_line(valor);
EXCEPTION
WHEN VALOR_NEGATIVO THEN
dbms_output.put_line('El valor no puede ser negativo');
END;
unc ones o e y
8/10/2019 PlSQL - Oracle10g
41/78
unc ones o e ySQLErrm
17/11/2014Curso de Oracle 10g
41
Con las funciones SQLCode y SQLErrm eobtener el cdigo de error que se ha produmensaje asociado, respectivamente
Cuando no se produce error, SQLCode devalor 0 (cero)
Son tiles cuando se necesita aclarar cual eproducido
unc ones o e y
8/10/2019 PlSQL - Oracle10g
42/78
unc ones o e ySQLErrm
17/11/2014Curso de Oracle 10g
42
DECLARE
err_num NUMBER;err_msg VARCHAR2(255);
result NUMBER;
BEGIN
SELECT 1/0 INTO result
FROM DUAL;
EXCEPTION
WHEN OTHERS THENerr_num := SQLCODE;
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error:'||TO_CHAR(err_num));
DBMS_OUTPUT.put_line(err_msg);
END;
unc ones o e y
8/10/2019 PlSQL - Oracle10g
43/78
unc ones o e ySQLErrm
17/11/2014Curso de Oracle 10g
43
Tambin es posible entregarle a la funcin SQLnmero negativo que represente un error de Oradevolver el mensaje asociado.DECLARE
msg VARCHAR2(255);
BEGINmsg := SQLERRM(-1403);DBMS_OUTPUT.put_line(MSG);
END;
8/10/2019 PlSQL - Oracle10g
44/78
PRACTICA
17/11/2014Curso de Oracle 10g
44
1. Ingresar dos nmeros por pantalla y realizar laoperaciones bsicas.
2. Crear un cursor implcito utilizando las tablas para la clase evaluativa.
3. Crear un cursor explcito el cual muestre los c
las tablas creadas en la clase evaluativa.4. Crear 2 ejemplos de excepciones predefinidas
definidas por los usuarios.
8/10/2019 PlSQL - Oracle10g
45/78
PL/SQL: Subprogramas
17/11/2014Curso de Oracle 10g
45
Los subprogramas son otro tipo de bloques P Se diferencian de los bloques annimos porq
nombre, se almacenan en la base de datos pueden usar parmetros.
Un subprograma es un bloque PL/SQL
seccin declarativa, una seccin ejecutabseccin de tratamiento de errores, donde nla seccin ejecutable es obligatoria.
Procedimientos almacenados, funciones y tri
8/10/2019 PlSQL - Oracle10g
46/78
Procedimientos almacena
17/11/2014Curso de Oracle 10g
46
Los procedimientos almacenados son utilizados
realicen cierta operacin pero que no devuelven reque invoc dicho procedimiento.
Un procedimiento almacenado posee las mismasque un bloque annimo (declaraciones, ejeexcepciones). La diferencia es que la d
CreateIs reemplaza a Declare Para eliminar un procedimiento almacenado se usa
DROP PROCEDUREnombre_procedimiento;
Procedimientos almacenados
8/10/2019 PlSQL - Oracle10g
47/78
Procedimientos almacenadosSintxis
17/11/2014Curso de Oracle 10g
47
Create [or Replace] Procedurenombre_proc [(lista_parametros)] is
..
End [nombre_proc];
Procedimientos almacenados
8/10/2019 PlSQL - Oracle10g
48/78
Procedimientos almacenadosEjemplo
17/11/2014Curso de Oracle 10g
48
CREATE OR REPLACE PROCEDURE EJEMP
mensaje varchar2(50);
BEGIN
mensaje:='Hola Mundo!!!'
dbms_output.put_line(mensaje);END;
Procedimientos almacenados
8/10/2019 PlSQL - Oracle10g
49/78
Procedimientos almacenadosEjemplo
17/11/2014Curso de Oracle 10g
49
8/10/2019 PlSQL - Oracle10g
50/78
Procedimientos almacenados t
8/10/2019 PlSQL - Oracle10g
51/78
oced e tos a ace adosparmetros
17/11/2014Curso de Oracle 10g
51
CREATE OR REPLACE PROCEDUREinsertar_alumno
(v_id number,
v_nombre varchar2,
v_apellido varchar2,
v_promedio number
)
ISBEGIN
insert into alumno
values(v_id,v_nombre,v_apellido,v_promedio);COMMIT; /*confirma los cambios*/
ENDinsertar_alumno;
Procedimientos almacenados t
8/10/2019 PlSQL - Oracle10g
52/78
parmetros
17/11/2014Curso de Oracle 10g
52
BEGINinsertar_alumno(5,'luis','guaman',9);
insertar_alumno(6,'pedro','perez',8);
END;
PROCEDIMIENTOS ALMACENADO
8/10/2019 PlSQL - Oracle10g
53/78
CON CURSORES IMPLICITOS
17/11/2014Curso de Oracle 10g
53
CREATE OR REPLACE PROCEDURE proc_cursores
( v_id IN ALUMNO.ID_ALUMNO%type
)
IS
v_nombre alumno.nombre%type;
BEGIN
SELECT nombre
INTO v_nombre
FROM alumno
WHERE ID_ALUMNO=v_id;
dbms_output.put_line('Nombre: '||v_nombre);
END;
CON CURSORES IMPLICITOS Y
8/10/2019 PlSQL - Oracle10g
54/78
EXCEPCIONES
17/11/2014Curso de Oracle 10g
54
CREATE OR REPLACE PROCEDURE proc_cursores (v_id IN ALUMNO.ID_ALU
ISv_nombre alumno.nombre%type;
BEGIN
SELECT nombre
INTO v_nombre
FROM alumno
WHERE ID_ALUMNO=v_id;
dbms_output.put_line('Nombre: '||v_nombre);
EXCEPTION
when no_data_found then
dbms_output.put_line('NO EXISTE EL ALUMNO SOLICITADO');
END;
PROCEDIMIENTOS ALMACENADOCO C SO S C OS
8/10/2019 PlSQL - Oracle10g
55/78
CON CURSORES EXPICITOS
17/11/2014Curso de Oracle 10g
55
CREATE OR REPLACE PROCEDURE proc_cursor_explic ( v_id alumno.id_alumno%type) IS
BEGIN
DECLARE CURSOR c_listado IS
SELECT * FROM alumno WHERE id_alumno = v_id;
reg_alumno alumno%rowtype;
BEGIN
OPEN c_listado;
LOOP
FETCH c_listado INTO reg_alumno;
EXIT WHEN c_listado%NOTFOUND;
dbms_output.put_line('nombre: '||reg_alumno.nombre);
END LOOP;
CLOSE c_listado;
END;
END;
FUNCIONES
8/10/2019 PlSQL - Oracle10g
56/78
FUNCIONES
17/11/2014Curso de Oracle 10g
56
A diferencia de los procedimientosalmacenados, las funciones son utilizapara que realicen cierta operatoria y qudevuelvan un resultado al que invoc
funcin.
FUNCIONES: Sintaxis
8/10/2019 PlSQL - Oracle10g
57/78
FUNCIONES: Sintaxis
17/11/2014Curso de Oracle 10g
57
Create [or Replace] Functionnombre_funcin [(lista_parametros)]tipo_dato is
..
Return|valor|;End [nombre_funcin];
FUNCIONES: Ejemplo
8/10/2019 PlSQL - Oracle10g
58/78
FUNCIONES: Ejemplo
17/11/2014Curso de Oracle 10g
58
CREATE OR REPLACE FUNCTIONfun_suma(valor1 number, valor2 numberRETURN NUMBERISresultado number;
BEGINresultado:=valor1+valor2;return resultado;
END FUN_SUMA;
Ejecucin de una funcin
8/10/2019 PlSQL - Oracle10g
59/78
Ejecucin de una funcin
17/11/2014Curso de Oracle 10g
59
Para invocar a la funcin, se puede readistintas formas.
Por ejemplo, se puede asignar el resuldirectamente en una variable o utilizar
sentencia SELECT - INTO
8/10/2019 PlSQL - Oracle10g
60/78
17/11/2014Curso de Oracle 10g
60
DECLARE
promedio number;
BEGIN
promedio:=fun_suma(5,5);
dbms_output.put_line('Promedio:'||promedio);
END;
8/10/2019 PlSQL - Oracle10g
61/78
17/11/2014Curso de Oracle 10g
61
DECLARE
promedio number;
BEGIN
select fun_suma(5,5) INTO promediodual;
dbms_output.put_line('Promedio:'||promedio);
Ejemplo 2: Creacin
8/10/2019 PlSQL - Oracle10g
62/78
Ejemplo 2: Creacin
17/11/2014Curso de Oracle 10g
62
create or replace functionfun_nombre_alumno (alumnoId n
return varchar2ISretNombre varchar2(50);
BEGINselect nombre into retNombre
from alumnowhere id_alumno = alumnoId;return retNombre;
end fun_nombre_alumno;
Ejemplo 2: Ejecucin
8/10/2019 PlSQL - Oracle10g
63/78
Ejemplo 2: Ejecucin
17/11/2014Curso de Oracle 10g
63
selectFUN_NOMBRE_ALUMNO(id_alu
from alumno;
Ejercicios (1/2)
8/10/2019 PlSQL - Oracle10g
64/78
Ejercicios (1/2)
17/11/2014Curso de Oracle 10g
64
Crear procedimientos almacenados utilizando curs
implcitos y excepciones para visualizar cada uno dcampos de la tabla turista. Crear un procedimiento almacenado para insertar d
las tablas hotel, vuelos y turistas. Crear un procedimiento almacenado para actualiza
de la tabla vuelos, el id del vuelo y los parmetros aactualizar se los harn mediante pantalla.
Crear una funcin con dos parmetros de entrada mediante excepciones se controlen valores negativ
8/10/2019 PlSQL - Oracle10g
65/78
Pakages (Paquetes)
8/10/2019 PlSQL - Oracle10g
66/78
Pakages (Paquetes)
17/11/2014Curso de Oracle 10g
66
Un package (paquete) es una estructagrupa objetos compilados(procedifunciones, variables, etc.) en la base d
Generalmente se utiliza para agrupar
del mismo proceso de negocio oobjetivos estn relacionados
Sintaxis
8/10/2019 PlSQL - Oracle10g
67/78
Sintaxis
17/11/2014Curso de Oracle 10g
67
Un package tiene dos partes:1. Especificacin: Se declaran los
(procedimientos, funciones, variables, eson de uso pblico. Slo es declaracontiene cdigo.
2. Cuerpo: Contiene el cdigo de losdeclarados en la especificacin. Tamdeclaran y contienen los (procedimientos, funciones, variables, e
Sintaxis: Especificacin
8/10/2019 PlSQL - Oracle10g
68/78
Sintaxis: Especificacin
17/11/2014Curso de Oracle 10g
68
CREATE {OR REPLACE} PACKAGE
nombre_package IS Declaraciones de tipos y registros pblicas
Declaraciones de variables y constantes publicas
Declaraciones de cursores pblicos
Declaraciones de funciones
Declaraciones de procedimientos
END nombre_package;
8/10/2019 PlSQL - Oracle10g
69/78
17/11/2014Curso de Oracle 10g
69
CREATE OR REPLACE PACKAGEpkg_calculadoraIS
function suma (valor1 number, valor2 number) return function resta (valor1 number, valor2 number) return n
END pkg_calculadora;
8/10/2019 PlSQL - Oracle10g
70/78
17/11/2014Curso de Oracle 10g
70
CREATE [OR REPLACE] PACKAGE BODY
nombre_package IS Declaraciones de tipos y registros privados
Declaraciones de variables y constantes privados
Declaraciones de cursores privados
Codificacin de funciones pblicas y privadas Codificacin de procedimientos pblicos y privados
END nombre_package;
8/10/2019 PlSQL - Oracle10g
71/78
17/11/2014Curso de Oracle 10g
71
CREATE OR REPLACE PACKAGE BODY pkg_calculadora IS
procedure imprimir_resultado (resp number) is
begin
dbms_output.put_line('Resultado: '||resp);
end imprimir_resultado;
function suma(valor1 number, valor2 number) return number is
resultado number;
begin
resultado:=(valor1+valor2);
imprimir_resultado(resultado);
return resultado;
end suma;
END pkg_calculadora;
8/10/2019 PlSQL - Oracle10g
72/78
Secuencias
8/10/2019 PlSQL - Oracle10g
73/78
Secuencias
17/11/2014Curso de Oracle 10g
73
Generan nmeros enteros nicos, los cuales p
utilizados por mltiples usuarios. Una utilidad que se le puede dar a una secue
de generar automticamente los nmerosclave primaria.
La regla para escribir el nombre de una secusimilar al de una tabla, pero es recomendabcomo prefijo, la letra "S" a todo nombre de sec
8/10/2019 PlSQL - Oracle10g
74/78
Ejemplo:
8/10/2019 PlSQL - Oracle10g
75/78
Ejemplo:
17/11/2014Curso de Oracle 10g
75
CREATE SEQUENCEseq_id_turista
INCREMENT BY 1
START WITH 100;
Uso
8/10/2019 PlSQL - Oracle10g
76/78
17/11/2014Curso de Oracle 10g
76
INSERT INTOTurista
VALUES(seq_id_turista.NextVal,'Juan','Lopez','Riobamba','0996
COMMIT;
NEXTVAL:es usado para generar un nmero de secuencespecificas.
CURRVAL:muestra el valor actual de la secuencia.
SELECT seq_id_turista.CURRVAL FROM DUAL;
Clase Evaluativa
8/10/2019 PlSQL - Oracle10g
77/78
17/11/2014Curso de Oracle 10g
77
8/10/2019 PlSQL - Oracle10g
78/78