You are on page 1of 78

Agenda

Repaso general PL/SQL

Tratamiento de Excepciones

Ejercicios Prcticos (Cursores y Excepciones)

Procedimientos almacenados

Funciones

Paquetes

Repaso General

Curso de Oracle 10g

17/11/2014

PL/SQL
3

PL/SQL es el lenguaje de programacin que proporciona Oracle


para extender el SQL estndar con otro tipo de estructuras e
instrucciones

Variables y tipos

Estructuras de control
Bucles y sentencias IFTHENELSE

Procedimientos y funciones

Tipos de objetos y mtodos


Curso de Oracle 10g

17/11/2014

PL/SQL
4

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 bloque.

Cada bloque realiza una unidad lgica de trabajo en el programa,


separando as unas tareas de otras.
Curso de Oracle 10g

17/11/2014

PL/SQL (variables)
5

Las variables deben declararse dentro de la seccin DECLARE y


deben seguir la siguiente sintaxis:

Nombre_variable TIPO [NOT NULL] [:= inicializacin];


Ejemplos:

Interes NUMBER(5,3);

Descripcion VARCHAR2(50) := 'inicial';

Fecha_max DATE;

Contabilizado BOOLEAN := TRUE;


Curso de Oracle 10g

17/11/2014

PL/SQL (Entrada y Salida de


datos)
6

DECLARE
v_fecha DATE:='&fecha';
edad number:=&edad;
BEGIN
DBMS_OUTPUT.PUT_LINE('La fecha introducida
es: '||TO_CHAR(v_fecha));
dbms_output.put_line('Edad: '
||TO_NUMBER(edad));
END;
Curso de Oracle 10g 17/11/2014

PL/SQL (Estructura bsica de un


bloque)
7

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;
Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


8

Realizan el control del comportamiento del bloque.

Tipos:
Condicionales (IF)
Bucles
Los bucles permiten repetir un nmero de veces un
conjunto de instrucciones PL/SQL.
Para romper el bucle se usa EXIT, GOTO o RAISE
Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


9

Condicional IF: Ejecuta una o varias sentencias dependiendo de


una condicin

Ejemplo:
IF fecha_nac != 1-01-1970 THEN
IF apellido =Martnez THEN
salario:= salario *1.15;
END IF;
END IF;
Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


10

BUCLES
Bucles simples (LOOP).
Bucles condicionales (WHILE)
Bucles numricos (FOR)

Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


11

Bucles simples (LOOP): Se repite tantas veces como sea


necesario hasta que se fuerza su salida con la instruccin EXIT.

Sintaxis:
LOOP
-- Instrucciones

IF (expresion) THEN
-- Instrucciones
EXIT;

END IF;
END LOOP;

Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


12

SET SERVEROUTPUT ON
DECLARE

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;
Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


13

BUCLES CONDICIONALES (WHILE)


La condicin se evala antes de entrar en el bucle

Sintaxis

WHILE condicin
LOOP
sentencias;
END LOOP;

Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


14

BUCLES CONDICIONALES (WHILE)

DECLARE

v_contador number:=1;
BEGIN
WHILE v_contador<=50 LOOP

dbms_output.put_line(v_contador);
v_contador:=v_contador+1;
END LOOP;

END;
Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


15

El bucle FOR, se repite tanta veces como le indiquemos en los


identificadores inicio y final.
FOR contador IN inicio..final LOOP
-- Instrucciones
END LOOP;
Curso de Oracle 10g

17/11/2014

PL/SQL (Estructuras de Control)


16

DECLARE
numero 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;
Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores)
17

tiles para gestionar grandes cantidades de datos.


Esta formado por un conjunto de registros devueltos por
una instruccin SQL de tipo SELECT.
Son segmentos de memoria utilizados para realizar
operaciones con las filas de datos recuperados.
Puede ser de dos tipos: IMPLICITOS y EXPLICITOS

Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores - Implcitos)


18

Un cursor implcito es aquel que devuelve una nica fila


como dato.
La sentencia SELECT INTO es un ejemplo de cursor
implcito
El cursor implcito debe retornar siempre una fila o
registro.
Si esa condicin no se cumple, se producir un error
(excepcin)
Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores - Implcitos)


19

DECLARE
v_nombre varchar2(50);
BEGIN
select nombre into v_nombre

from alumno
where id_alumno=3;
dbms_output.put_line('estudiante '||v_nombre);

END;

Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores - Implcitos)


20

DECLARE
var1 alumno%rowtype;

BEGIN
select * into var1
from alumno
where ID_ALUMNO=1;
dbms_output.put_line('nombre: '||var1.nombre||' apellido:
'||var1.apellido);
END;

Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores - Explcitos)


21

Un cursor explcito puede devolver cero o ms filas.


Generalmente, un cursor explcito pasa por las siguientes
etapas:
Declaracin (CURSOR)
Apertura (OPEN)
Extraccin (FETCH)
Cierre (CLOSE)
Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores Explcitos:


SINTAXIS)
22

Para declarar un cursor:


Simple:
CURSOR <nombre_cursor> IS <instruccin select>

Con parmetros:
CURSOR <nombre_cursor> (param1 tipo1, param2 tipo2, ,
param n tipo n) IS <instruccin select>

17/11/2014

PL/SQL (Cursores Explcitos:


SINTAXIS)
23

Para abrir un cursor:


Simple:
OPEN nombre_cursor;

Con parmetros:
OPEN nombre_cursor (valor1, valor2, ., valor n);

17/11/2014

SPL/SQL (Cursores Explcitos:


SINTAXIS)
24

Para extraer datos de un cursor:


Con variables:
FETCH nombre_cursor INTO lista_variables;

Con registro PL/SQL:


FETCH nombre_cursor INTO registro_PL/SQL;

17/11/2014

PL/SQL (Cursores Explcitos:


SINTAXIS)
25

Para cerrar un cursor:


CLOSE nombre_cursor;

17/11/2014

ATRIBUTOS DE LOS
CURSORES
26

Con los atributos de los cursores se permite reconocer el estado


de un cursor
%NOTFOUND: Devuelve verdadero cuando el cursor no retorna
un registro
%FOUND: Devuelve verdadero cuando el cursor retorna un
registro
%ISOPEN: Devuelve verdadero mientras el cursor est abierto
%ROWCOUNT: Devuelve la cantidad de registros que se ha
recuperado hasta el momento
17/11/2014

PL/SQL (Cursores - Explcitos)


27

DECLARE
CURSOR calumno IS
select * from alumno;
reg_alumno alumno%rowtype;
BEGIN
OPEN calumno;
LOOP
FETCH calumno INTO reg_alumno;
EXIT when calumno%notfound;
dbms_output.put_line(reg_alumno.nombre);
END LOOP;
CLOSE calumno;
END;

Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores - Explcitos)


28

CONSIDERACIONES A TENER EN CUENTA


Cuando un cursor est cerrado, no puede retornar registros y en
general, los atributos tampoco pueden ser utilizados (excepto
%ISOPEN)
No se puede cerrar un cursor que ya est cerrado

Es conveniente consultar el resultado de una extraccin mediante


los atributos del cursor (%NOTFOUND, %FOUND)
Al terminar de usar un cursor, es recomendable cerrarlo para liberar
espacio de memoria y dejarlo disponible para el SGBD
Curso de Oracle 10g

17/11/2014

PL/SQL (Cursores - Explcitos)


29

OTRAS FORMAS DE CURSORES EXPLCITOS


Se puede utilizar una estructura de ciclo FOR, para recorrer el
resultado de un cursor
De la forma anterior, se ejecutan
instrucciones OPEN, FETCH y CLOSE

implcitamente

las

Uno de los puntos en contra respecto a esta modalidad, es que


el cursor no tiene nombre, y por lo tanto, su resultado no puede
ser capturado por una aplicacin externa a Oracle para el uso de
sus datos (ej. .NET, Java)
Curso de Oracle 10g

17/11/2014

30

DECLARE
CURSOR curalumno IS
select * from alumno;
reg_alumno alumno%rowtype;
BEGIN
FOR reg_alumno in curalumno
LOOP
dbms_output.put_line(reg_alumno.nombre);
END LOOP;
END;
Curso de Oracle 10g

17/11/2014

PL/SQL (Excepciones)
31

Permite responder ante cualquier problema que


pueda ocurrir en la ejecucin de cualquier
operacin
La ejecucin de la aplicacin finaliza al
presentarse algn error grave.
Mediante el manejo de excepciones es posible
realizar una serie de acciones y continuar la
ejecucin de la aplicacin.
Curso de Oracle 10g 17/11/2014

PL/SQL (Excepciones: Sintaxis)


32

DECLARE
-- Declaraciones
BEGIN
-- Ejecucion
EXCEPTION
-- Excepcion
END;
Curso de Oracle 10g

17/11/2014

PL/SQL (Excepciones
predefinidas)
33

NO_DATA_FOUND, TOO_MANY_ROWS

INVALID_NUMBER, VALUE_ERROR, ZERO_DIVIDE

Ocurren cuando un select no selecciona nada o selecciona


varias filas cuando solo se esperaba una
Se producen por operaciones invalidas de tratamiento de
nmeros

DUP_VAL_ON_INDEX

Se produce cuando se intenta insertar una clave primaria


duplicada.
Curso de Oracle 10g

17/11/2014

PL/SQL (Excepciones
predefinidas)
34

CURSOR_ALREADY_OPEN

INVALID_CURSOR

Ocurre al intentar abrir un cursor ya abierto


Ocurre al intentar hacer una operacin invalida sobre
un cursor

PROGRAM_ERROR, STORAGE_ERROR,
TIMEOUT_ON_RESOURCE

Detectan errores de almacenamiento o de ejecucin.


Curso de Oracle 10g

17/11/2014

PL/SQL (Excepciones
predefinidas)
35

DECLARE
-- Declaraciones
BEGIN
-- Ejecucion
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Se ejecuta cuando ocurre una excepcion de tipo
NO_DATA_FOUND
WHEN ZERO_DIVIDE THEN
-- Se ejecuta cuando ocurre una excepcion de tipo ZERO_DIVIDE
WHEN OTHERS THEN
-- Se ejecuta cuando ocurre una excepcion de un tipo no tratado
-- en los bloques anteriores
END;
Curso de Oracle 10g

17/11/2014

Ejemplo
36

DECLARE
v_nombre varchar2(50);
BEGIN
select nombre into
v_nombre
from alumno;
bms_output.put_line('estudia
nte '||v_nombre);
END;

DECLARE
v_nombre varchar2(50);
BEGIN
select nombre into v_nombre
from alumno;
dbms_output.put_line('estudiante
'||v_nombre);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('ERROR
SE HAN SELECCIONADO MAS DE UN
REGISTRADO');
END;
Curso de Oracle 10g

17/11/2014

Excepciones definidas por los


usuarios
37

PL/SQL permite al usuario definir sus propias


excepciones, las que debern ser declaradas y
lanzadas explcitamente utilizando la sentencia
RAISE.
Las excepciones deben ser declaradas en el
segmento DECLARE de un bloque, subprograma
o paquete. Se declara una excepcin como
cualquier otra variable, asignndole el tipo
EXCEPTION. Las mismas reglas de alcance
aplican tanto sobre variables como sobre las
Curso de Oracle 10g 17/11/2014
excepciones.

Sintaxis
38

DECLARE
-- Declaraciones
MyExcepcion EXCEPTION;
BEGIN
-- Ejecucion
EXCEPTION
-- Excepcion
END;
Curso de Oracle 10g

17/11/2014

39

REGLAS DE ALCANCE
Una excepcin es vlida dentro de su mbito de alcance, es
decir el bloque o programa donde ha sido declarada. Las
excepciones predefinidas son siempre vlidas.
Como las variables, una excepcin declarada en un bloque es
local a ese bloque y global a todos los sub-bloques que
comprende.
LA SENTENCIA RAISE
La sentencia RAISE permite lanzar una excepcin en forma
explcita. Es posible utilizar esta sentencia en cualquier lugar
que se encuentre dentro del alcance de la excepcin.
Curso de Oracle 10g

17/11/2014

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;
Curso de Oracle 10g

17/11/2014

Funciones SQLCode y
SQLErrm
41

Con las funciones SQLCode y SQLErrm es posible


obtener el cdigo de error que se ha producido y el
mensaje asociado, respectivamente
Cuando no se produce error, SQLCode devuelve el
valor 0 (cero)
Son tiles cuando se necesita aclarar cual es el error
producido
Curso de Oracle 10g

17/11/2014

Funciones SQLCode y
SQLErrm
42

DECLARE
err_num NUMBER;
err_msg VARCHAR2(255);

result NUMBER;
BEGIN
SELECT 1/0 INTO result
FROM DUAL;
EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error:'||TO_CHAR(err_num));

DBMS_OUTPUT.put_line(err_msg);
END;

Curso de Oracle 10g

17/11/2014

Funciones SQLCode y
SQLErrm
43

Tambin es posible entregarle a la funcin SQLERRM un


nmero negativo que represente un error de Oracle y sta
devolver el mensaje asociado.
DECLARE
msg VARCHAR2(255);
BEGIN
msg := SQLERRM(-1403);
DBMS_OUTPUT.put_line(MSG);
END;
Curso de Oracle 10g 17/11/2014

PRACTICA
44

1.

Ingresar dos nmeros por pantalla y realizar las cuatro


operaciones bsicas.

2.

Crear un cursor implcito utilizando las tablas creadas


para la clase evaluativa.

3.

Crear un cursor explcito el cual muestre los campos de


las tablas creadas en la clase evaluativa.

4.

Crear 2 ejemplos de excepciones predefinidas y


definidas por los usuarios.
Curso de Oracle 10g

17/11/2014

PL/SQL: Subprogramas
45

Los subprogramas son otro tipo de bloques PL/SQL


Se diferencian de los bloques annimos porque llevan
nombre, se almacenan en la base de datos y algunos
pueden usar parmetros.
Un subprograma es un bloque PL/SQL con una
seccin declarativa, una seccin ejecutable y una
seccin de tratamiento de errores, donde nicamente
la seccin ejecutable es obligatoria.
Procedimientos almacenados, funciones y triggers.
Curso de Oracle 10g

17/11/2014

Procedimientos almacenados
46

Los procedimientos almacenados son utilizados para que


realicen cierta operacin pero que no devuelven resultados al
que invoc dicho procedimiento.
Un procedimiento almacenado posee las mismas secciones
que un bloque annimo (declaraciones, ejecucin y
excepciones). La diferencia es que la declaracin
CreateIs reemplaza a Declare
Para eliminar un procedimiento almacenado se usa:
DROP PROCEDURE nombre_procedimiento;
Curso de Oracle 10g

17/11/2014

Procedimientos almacenados:
Sintxis
47

Create [or Replace] Procedure


nombre_proc [(lista_parametros)] is
..
End [nombre_proc];

Curso de Oracle 10g

17/11/2014

Procedimientos almacenados:
Ejemplo
48

CREATE OR REPLACE PROCEDURE EJEMPLO1 IS


mensaje varchar2(50);
BEGIN
mensaje:='Hola Mundo!!!'
dbms_output.put_line(mensaje);
END;
Curso de Oracle 10g

17/11/2014

Procedimientos almacenados:
Ejemplo
49

Curso de Oracle 10g

17/11/2014

Ejecucin
50

Forma1:
SET
SERVEROUTPUT ON
BEGIN
ejemplo1;
END;

Forma 2:
EXEC ejemplo1;

Curso de Oracle 10g

17/11/2014

Procedimientos almacenados con


parmetros
51

CREATE OR REPLACE PROCEDURE insertar_alumno


(
v_id number,
v_nombre varchar2,
v_apellido varchar2,
v_promedio number
)
IS
BEGIN
insert into alumno
values(v_id,v_nombre,v_apellido,v_promedio);
COMMIT;
/*confirma los cambios*/
Curso de Oracle 10g
END insertar_alumno;

17/11/2014

Procedimientos almacenados con


parmetros
52

BEGIN
insertar_alumno(5,'luis','guaman',9);
insertar_alumno(6,'pedro','perez',8);
END;

Curso de Oracle 10g

17/11/2014

PROCEDIMIENTOS ALMACENADOS
CON CURSORES IMPLICITOS
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;
Curso de Oracle 10g

17/11/2014

PROCEDIMIENTOS ALMACENADOS
CON CURSORES IMPLICITOS Y
EXCEPCIONES
54

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);
EXCEPTION
when no_data_found then
dbms_output.put_line('NO EXISTE EL ALUMNO SOLICITADO');
END;
Curso de Oracle 10g 17/11/2014

PROCEDIMIENTOS ALMACENADOS
CON CURSORES EXPICITOS
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;

Curso de Oracle 10g

17/11/2014

FUNCIONES
56

A diferencia de los procedimientos


almacenados, las funciones son utilizadas
para que realicen cierta operatoria y que
devuelvan un resultado al que invoc dicha
funcin.

Curso de Oracle 10g

17/11/2014

FUNCIONES: Sintaxis
57

Create [or Replace] Function


nombre_funcin [(lista_parametros)] Return
tipo_dato is
..
Return |valor|;
End [nombre_funcin];
Curso de Oracle 10g

17/11/2014

FUNCIONES: Ejemplo
58

CREATE OR REPLACE FUNCTION


fun_suma(valor1 number, valor2 number)
RETURN NUMBER IS
resultado number;
BEGIN
resultado:=valor1+valor2;
return resultado;
END FUN_SUMA;
Curso de Oracle 10g 17/11/2014

Ejecucin de una funcin


59

Para invocar a la funcin, se puede realizar de


distintas formas.
Por ejemplo, se puede asignar el resultado
directamente en una variable o utilizar una
sentencia SELECT - INTO

Curso de Oracle 10g

17/11/2014

60

DECLARE
promedio number;
BEGIN
promedio:=fun_suma(5,5);
dbms_output.put_line('Promedio:
'||promedio);
END;
Curso de Oracle 10g 17/11/2014

61

DECLARE
promedio number;
BEGIN
select fun_suma(5,5) INTO promedio from
dual;
dbms_output.put_line('Promedio:
'||promedio);
Curso de Oracle 10g 17/11/2014

Ejemplo 2: Creacin
62

create or replace function fun_nombre_alumno (alumnoId number)


return varchar2
IS
retNombre varchar2(50);
BEGIN
select nombre into retNombre
from alumno
where id_alumno = alumnoId;
return retNombre;
end fun_nombre_alumno;
Curso de Oracle 10g

17/11/2014

Ejemplo 2: Ejecucin
63

select FUN_NOMBRE_ALUMNO(id_alumno)
from alumno;

Curso de Oracle 10g

17/11/2014

Ejercicios (1/2)
64

Crear procedimientos almacenados utilizando cursores


implcitos y excepciones para visualizar cada uno de los
campos de la tabla turista.
Crear un procedimiento almacenado para insertar datos en
las tablas hotel, vuelos y turistas.
Crear un procedimiento almacenado para actualizar los datos
de la tabla vuelos, el id del vuelo y los parmetros a
actualizar se los harn mediante pantalla.
Crear una funcin con dos parmetros de entrada en el cual
mediante excepciones se controlen valores negativos.
Curso de Oracle 10g

17/11/2014

Ejercicios (2/2)
65

Crear una funcin en la cual se ingrese el id


del estudiante y se visualice el nombre de
dicho estudiante.

Curso de Oracle 10g

17/11/2014

Pakages (Paquetes)
66

Un package (paquete) es una estructura que


agrupa objetos compilados(procedimientos,
funciones, variables, etc.) en la base de datos.
Generalmente se utiliza para agrupar objetos
del mismo proceso de negocio o cuyos
objetivos estn relacionados
Curso de Oracle 10g

17/11/2014

Sintaxis
67

Un package tiene dos partes:


1.
Especificacin: Se declaran los objetos
(procedimientos, funciones, variables, etc.) que
son de uso pblico. Slo es declaracin, no
contiene cdigo.
2.
Cuerpo: Contiene el cdigo de los objetos
declarados en la especificacin. Tambin se
declaran
y
contienen
los
objetos
(procedimientos, funciones,
Curso de Oracle variables,
10g 17/11/2014 etc.) que

Sintaxis: Especificacin
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;
Curso de Oracle 10g

17/11/2014

69

CREATE OR REPLACE PACKAGE pkg_calculadora IS


function suma (valor1 number, valor2 number) return number;

function resta (valor1 number, valor2 number) return number;


END pkg_calculadora;

Curso de Oracle 10g

17/11/2014

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;
Curso de Oracle 10g

17/11/2014

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;
Curso de Oracle 10g 17/11/2014

72

SET SERVEROUTPUT ON
DECLARE

r number;
BEGIN
r:=PKG_CALCULADORA.suma(2,3);
r:=PKG_CALCULADORA.resta(2,3);
END;

Curso de Oracle 10g

17/11/2014

Secuencias
73

Generan nmeros enteros nicos, los cuales pueden ser


utilizados por mltiples usuarios.

Una utilidad que se le puede dar a una secuencia, es la


de generar automticamente los nmeros de una
clave primaria.
La regla para escribir el nombre de una secuencia, es
similar al de una tabla, pero es recomendable colocar
como prefijo, la letra "S" a todo nombre de secuencia.
Curso de Oracle 10g

17/11/2014

Sintaxis
74

CREATE SEQUENCE nombre_secuencia


INCREMENT BY numero_incremento

START WITH numero_por_el_que_empezara


MAXVALUE valor_maximo | NOMAXVALUE
MINVALUE valor_minimo | NOMINVALUE

Curso de Oracle 10g

17/11/2014

Ejemplo:
75

CREATE SEQUENCE seq_id_turista


INCREMENT BY 1
START WITH 100;

Curso de Oracle 10g

17/11/2014

Uso
76

INSERT INTO Turista


VALUES
(seq_id_turista.NextVal,'Juan','Lopez','Riobamba','0996805810');
COMMIT;

NEXTVAL: es usado para generar un nmero de secuencias


especificas.
CURRVAL: muestra el valor actual de la secuencia.

SELECT seq_id_turista.CURRVAL FROM DUAL;


Curso de Oracle 10g

17/11/2014

Clase Evaluativa
77

Curso de Oracle 10g

17/11/2014

You might also like