PlSQL - Oracle10g

Embed Size (px)

Citation preview

  • 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