+ All Categories
Home > Documents > Plsql Material

Plsql Material

Date post: 06-Mar-2016
Category:
Upload: jose-rodriguez
View: 43 times
Download: 0 times
Share this document with a friend
Description:
pl

of 89

Transcript
  • PL/SQLPL/SQL

  • ContenidoContenido4 BloquesBloques4 Creacin de Program UnitsCreacin de Program Units4 Variables y ConstantesVariables y Constantes4 Tipos de DatosTipos de Datos4 ParmetrosParmetros4 Estructuras de ControlEstructuras de Control4 Manejo de ExcepcionesManejo de Excepciones4 Manejo de CursoresManejo de Cursores

  • ContenidoContenido4 PackagesPackages4 Cursores EmpaquetadosCursores Empaquetados4 Sobrecarga de OperadoresSobrecarga de Operadores4 Estructura de DatosEstructura de Datos4 Triggers de la Base de DatosTriggers de la Base de Datos

  • BloquesBloques4 PL/SQL es un lenguaje PL/SQL es un lenguaje

    estructurado por bloquesestructurado por bloques4 Un bloque permite agrupar Un bloque permite agrupar

    lgicamente declaraciones, lgicamente declaraciones, sentencias y excepcionessentencias y excepciones

    4 Un bloque puede ser:Un bloque puede ser:4annimoannimo4procedimientoprocedimiento4funcinfuncin

  • BloquesBloques4 Se puede anidar subloques en:Se puede anidar subloques en:

    4rea de sentenciasrea de sentencias4rea de excepcionesrea de excepciones

    4 Definicin de subprogramas Definicin de subprogramas locales en rea de declaracioneslocales en rea de declaraciones

    4 Las declaraciones y las sentencias Las declaraciones y las sentencias se separan por ;se separan por ;

  • BloquesBloques4 Bloque annimoBloque annimo

    [DECLARE[DECLARE--declaraciones]--declaraciones]

    BEGINBEGIN --sentencias--sentencias

    [EXCEPTION[EXCEPTION--manejadores]--manejadores]

    END;END;

  • BloquesBloques4 Procedimiento:Procedimiento:

    PROCEDURE nombre (parmetros)PROCEDURE nombre (parmetros)ISIS

    --declaraciones]--declaraciones]BEGINBEGIN

    --sentencias--sentencias[EXCEPTION[EXCEPTION

    --manejadores]--manejadores]END;END;

  • BloquesBloques4 Funcin:Funcin:

    FUNCTION nombre (parmetros) RETURN FUNCTION nombre (parmetros) RETURN tipotipo

    ISIS--declaraciones]--declaraciones]

    BEGINBEGIN--sentencias--sentencias

    [EXCEPTION[EXCEPTION--manejadores]--manejadores]

    END;END;

  • Creacin de Program UnitsCreacin de Program Units4 Para crear en la base de datos un Para crear en la base de datos un

    procedimiento o funcin almacenado procedimiento o funcin almacenado se debe prefijar con:se debe prefijar con:

    CREATE [OR REPLACE] textoCREATE [OR REPLACE] texto

    4 Para ver los errores en SQL*Plus Para ver los errores en SQL*Plus utilizar SHOW ERRORSutilizar SHOW ERRORS

  • Variables y ConstantesVariables y Constantes4 PL/SQL permite declarar variables y PL/SQL permite declarar variables y

    constantesconstantes4 Estas deben ser declaradas antes de Estas deben ser declaradas antes de

    ser referenciadasser referenciadas4 Las variables y constantes se declaran Las variables y constantes se declaran

    en el rea de declaraciones de un en el rea de declaraciones de un bloquebloque

  • Variables y ConstantesVariables y Constantes4 Reglas de alcance:Reglas de alcance:

    4Una variable o constante declarada en un Una variable o constante declarada en un bloque puede ser referenciada solamente bloque puede ser referenciada solamente en ese bloque y sus sub-bloquesen ese bloque y sus sub-bloques

    4Un procedimiento o funcin declarado en Un procedimiento o funcin declarado en un bloque puede ser invocado solamente un bloque puede ser invocado solamente en ese bloque y sus sub-bloquesen ese bloque y sus sub-bloques

  • Variables y ConstantesVariables y Constantes4 Para declarar una constante la Para declarar una constante la

    sintaxis es:sintaxis es:constant_name CONSTANTconstant_name CONSTANTtipo_dato [NOT NULL](:=|DEFAULT) tipo_dato [NOT NULL](:=|DEFAULT) expression;expression;

    4 Para declarar una variable la sintaxis Para declarar una variable la sintaxis es:es:

    variable_name tipo_dato [[NOT NULL] variable_name tipo_dato [[NOT NULL] (:=|DEFAULT) expression);(:=|DEFAULT) expression);

  • Variables y ConstantesVariables y Constantes4 Hay diferentes formas de asignar Hay diferentes formas de asignar

    valor a una variable:valor a una variable:

    4asignacin directa :=asignacin directa :=4SELECT.....INTO variable,..,variableSELECT.....INTO variable,..,variable4FETCH cursor INTO variable,..,variableFETCH cursor INTO variable,..,variable

  • Tipos de DatosTipos de Datos4 El tipo de dato de una variable o El tipo de dato de una variable o

    constante puede ser:constante puede ser:4un tipo escalarun tipo escalar4un tipo predefinidoun tipo predefinido4el tipo de otra variable o columna de una el tipo de otra variable o columna de una

    tabla, registro o cursor (%type)tabla, registro o cursor (%type)4el tipo de la fila de una tabla, un registro el tipo de la fila de una tabla, un registro

    o la fila de un cursor (%rowtype)o la fila de un cursor (%rowtype)

  • Tipos de DatosTipos de Datos

  • ParmetrosParmetros4 Los subprogramas se pasan Los subprogramas se pasan

    informacin mediante parmetrosinformacin mediante parmetros4 La sintaxis para definir un parmetro La sintaxis para definir un parmetro

    esesparameter_name [IN|OUT|IN OUT] tipo [(:=|parameter_name [IN|OUT|IN OUT] tipo [(:=|DEFAULT) expression]DEFAULT) expression]

    4 Los parmetros pueden pasarseLos parmetros pueden pasarse4posicionalmenteposicionalmente4por nombrepor nombre

  • Estructuras de ControlEstructuras de Control

  • Estructuras de ControlEstructuras de Control4 IF-THENIF-THEN

    IF condicion THENIF condicion THENsequencia_de_sentencias;sequencia_de_sentencias;

    END IF;END IF;

  • Estructuras de ControlEstructuras de Control4 IF-THEN-ELSEIF-THEN-ELSE

    IF condicion THENIF condicion THENsequencia_de_sentencias1;sequencia_de_sentencias1;

    ELSEELSEsequencia_de_sentencias2;sequencia_de_sentencias2;

    END IF;END IF;

  • Estructuras de ControlEstructuras de Control4 IF-THEN-ELSIFIF-THEN-ELSIF

    IF condicion THENIF condicion THENsequencia_de_sentencias1;sequencia_de_sentencias1;

    ELSIFELSIFsequencia_de_sentencias2;sequencia_de_sentencias2;

    ELSEELSEsequencia_de_sentencias3;sequencia_de_sentencias3;

    END IF;END IF;

  • Estructuras de ControlEstructuras de Control4 LOOPLOOP

    LOOPLOOP

    sequencia_de_sentencias;sequencia_de_sentencias;END LOOP; END LOOP;

  • Estructuras de ControlEstructuras de Control4 EXITEXIT

    EXIT [etiqueta];EXIT [etiqueta];

    4 EXIT-WHENEXIT-WHEN

    EXIT [etiqueta] WHEN condicin;EXIT [etiqueta] WHEN condicin;

  • Estructuras de ControlEstructuras de Control4 WHILE-LOOPWHILE-LOOP

    WHILE condicion LOOPWHILE condicion LOOPsequencia_de_sentencias;sequencia_de_sentencias;

    END LOOP;END LOOP;

  • Estructuras de ControlEstructuras de Control4 FOR-LOOPFOR-LOOP

    FOR contador IN [REVERSE] FOR contador IN [REVERSE] min..maxmin..max

    LOOPLOOPsequencia_de_sentencias;sequencia_de_sentencias;

    END LOOP;END LOOP;

  • Estructuras de ControlEstructuras de Control4 GOTOGOTO

    GOTO label;GOTO label;

    4 NULLNULLNULL;NULL;

  • Manejo de ExcepcionesManejo de Excepciones4 En PL/SQL un error o advertencia se En PL/SQL un error o advertencia se

    llama excepcion (exception)llama excepcion (exception)4 Pueden ser definidas internamente o Pueden ser definidas internamente o

    por el usuariopor el usuario4 Cuando se produce un error una Cuando se produce un error una

    excepcion es disparada (raised)excepcion es disparada (raised)4 La ejecucin se detiene y el control se La ejecucin se detiene y el control se

    transfiere al rea de excepciones del transfiere al rea de excepciones del bloquebloque

  • Manejo de ExcepcionesManejo de Excepciones4 Para manejar excepciones se escriben Para manejar excepciones se escriben

    rutinas separadas llamadas rutinas separadas llamadas manejadores (handlers) de manejadores (handlers) de excepciones.excepciones.

    4 Forma de un manejador de Forma de un manejador de excepciones:excepciones:

    WHEN excepcion,[excepcion] THENWHEN excepcion,[excepcion] THENsequencia_de_sentencias;sequencia_de_sentencias;

  • Manejo de ExcepcionesManejo de Excepciones4 Ventajas:Ventajas:

    4permite agrupar el manejo de errores y permite agrupar el manejo de errores y manejarlo separadamentemanejarlo separadamente

    4legibilidad de programaslegibilidad de programas4robustez y confiabilidadrobustez y confiabilidad

    4 Desventajas:Desventajas:4capturan slo errores de ejecucincapturan slo errores de ejecucin4enmascaran la fuente del errorenmascaran la fuente del error

  • Manejo de ExcepcionesManejo de Excepciones

  • Manejo de ExcepcionesManejo de Excepciones4 Una excepcin de usuario se declara:Una excepcin de usuario se declara:

    excepcion EXCEPTION;excepcion EXCEPTION;

    4 Luego se dispara con:Luego se dispara con:

    RAISE excepcion;RAISE excepcion;

  • Manejo de ExcepcionesManejo de Excepciones4 Para definir el resto de las Para definir el resto de las

    excepciones se utiliza la excepcion excepciones se utiliza la excepcion OTHERSOTHERS

    4 Para asociar una excepcin de usuario Para asociar una excepcin de usuario con un error de Oracle se debe con un error de Oracle se debe declarar:declarar:

    PRAGMA EXCEPTION_INIT PRAGMA EXCEPTION_INIT (nombre,nro_error_Oracle)(nombre,nro_error_Oracle)

  • Manejo de ExcepcionesManejo de Excepciones4 En el PL/SQL de la base de datos, para En el PL/SQL de la base de datos, para

    producir una excepcin a ser producir una excepcin a ser capturada por una aplicacin se debe capturada por una aplicacin se debe usar:usar:RAISE_APPLICATION_ERROR(nro_error,RAISE_APPLICATION_ERROR(nro_error,mensaje[,TRUE|FALSE] );mensaje[,TRUE|FALSE] );

    donde nro_error est entre -20000 y donde nro_error est entre -20000 y -20999-20999

  • Manejo de ExcepcionesManejo de Excepciones4 Cuando se dispara una excpecin en Cuando se dispara una excpecin en

    un bloque es capturada por el un bloque es capturada por el manejador de excepciones de ese manejador de excepciones de ese bloquebloque

    4 Si dicho manejador no maneja la Si dicho manejador no maneja la excepin, la excepcin se propagaexcepin, la excepcin se propaga

  • Manejo de ExcepcionesManejo de ExcepcionesEXCEPTIONEXCEPTION

    WHEN nombre_exception1 THENWHEN nombre_exception1 THENsequencia_de_sentencias1;sequencia_de_sentencias1;

    WHEN nombre_exception1 THENWHEN nombre_exception1 THENsequencia_de_sentencias2;sequencia_de_sentencias2;

    ..........WHEN OTHERS THENWHEN OTHERS THEN

    sequencia_de_sentencias3;sequencia_de_sentencias3;END;END;

  • Manejo de ExcepcionesManejo de Excepciones4 En un manejador de excepciones es En un manejador de excepciones es

    posible utilizar las funciones:posible utilizar las funciones:4SQLCODE: cdigo del errorSQLCODE: cdigo del error

    4SQLERRM: mensaje del errorSQLERRM: mensaje del error

  • Manejo de CursoresManejo de Cursores

    4 Hay dos tipos de cursoresHay dos tipos de cursores

    4Implcitos: sentencias de manipulacin de Implcitos: sentencias de manipulacin de SQLSQL

    4Explcitos:proceso individual de filas en Explcitos:proceso individual de filas en consultas que devuelven ms de una fila.consultas que devuelven ms de una fila.

  • Manejo de CursoresManejo de Cursores

    4 Un cursor se declara por medio deUn cursor se declara por medio de

    CURSOR nombre[(parametros)] ISCURSOR nombre[(parametros)] ISsentencia_select;sentencia_select;

    donde un parmetro tiene la forma:donde un parmetro tiene la forma:nombre [IN] tipo [{:=|nombre [IN] tipo [{:=|

    DEFAULT}expr]DEFAULT}expr]

  • Manejo de CursoresManejo de Cursores

    4 Un cursor se maneja mediante las Un cursor se maneja mediante las operaciones:operaciones:

    4OPEN: abre el cursor y guarda memoriaOPEN: abre el cursor y guarda memoria4FETCH: recupera la siguiente fila del FETCH: recupera la siguiente fila del

    cursorcursor4CLOSE: cierra el cursorCLOSE: cierra el cursor

  • Manejo de CursoresManejo de Cursores4 Y mediante los atributos:Y mediante los atributos:

    4%FOUND:TRUE si el ltimo FETCH %FOUND:TRUE si el ltimo FETCH recupero filas y FALSE sinorecupero filas y FALSE sino

    4%NOTFOUND: opuesto de %FOUND%NOTFOUND: opuesto de %FOUND4%ISOPEN: TRUE si el cursor esta abierto y %ISOPEN: TRUE si el cursor esta abierto y

    FALSE sinoFALSE sino4%ROWCOUNT: cantidad de filas ya %ROWCOUNT: cantidad de filas ya

    procesadas por el cursor.procesadas por el cursor.

  • Manejo de CursoresManejo de Cursores4 Cuando se abre un cursor se ejecuta Cuando se abre un cursor se ejecuta

    la consulta y se identifica el conjunto la consulta y se identifica el conjunto de filas resultado.de filas resultado.

    4 Para consultas definidas con FOR Para consultas definidas con FOR UPDATE se lockean las filas UPDATE se lockean las filas involucradasinvolucradas

    4 Un cursor mantiene consistencia de Un cursor mantiene consistencia de lectura al momento en que se abrelectura al momento en que se abre

    4 Los parmetros se pasan al abrir el Los parmetros se pasan al abrir el cursor.cursor.

  • Manejo de CursoresManejo de Cursores

    4 El fetch recupera las filas de la El fetch recupera las filas de la consulta de a una por vez y asigna el consulta de a una por vez y asigna el resultado en las variables indicadasresultado en las variables indicadas

    4 Cerrar un cursor implica Cerrar un cursor implica deshabilitarlo.deshabilitarlo.

  • Manejo de CursoresManejo de Cursores4 Es posible simplificar la codificacin Es posible simplificar la codificacin

    utilizando un FOR de cursoresutilizando un FOR de cursores

    4 La sintaxis es la siguiente:La sintaxis es la siguiente:

    FOR variable IN cursor LOOPFOR variable IN cursor LOOPsequencia_de_sentencias;sequencia_de_sentencias;

    END LOOP;END LOOP;

  • Manejo de CursoresManejo de Cursores4 FOR de cursores declara FOR de cursores declara

    implcitamente la variable de tipo implcitamente la variable de tipo cursor %ROWTYPE;cursor %ROWTYPE;

    4 Automticamente:Automticamente:4abre el cursorabre el cursor4en cada paso asigna la fila actual a la en cada paso asigna la fila actual a la

    variablevariable4al terminar de recorrer las filas, cierra el al terminar de recorrer las filas, cierra el

    cursorcursor

    4 Se puede usar una subconsulta Se puede usar una subconsulta definida en el momento en vez de un definida en el momento en vez de un cursorcursor

  • PackagesPackages4 Un paquete (Un paquete (packagepackage) es un objeto de ) es un objeto de

    la base de datos que agrupa tipos, la base de datos que agrupa tipos, objetos y subprogramas PL/SQL objetos y subprogramas PL/SQL lgicamente relacionados.lgicamente relacionados.

    4 Tienen dos partes:Tienen dos partes:4Especificacin(Especificacin(specificationspecification):interfase con ):interfase con

    las aplicacioneslas aplicaciones4Cuerpo (Cuerpo (bodybody): implementa la ): implementa la

    especificacinespecificacin

  • PackagesPackages

    4 Ventajas:Ventajas:4modularidadmodularidad4diseo de aplicaciones ms fcildiseo de aplicaciones ms fcil4ocultamiento de informacinocultamiento de informacin4mayor funcionalidadmayor funcionalidad

  • PackagesPackages4 Los paquetes no pueden ser:Los paquetes no pueden ser:

    4invocadosinvocados4anidadosanidados4parametrizadosparametrizados

    4 Lo que se invoca, parametriza o anida Lo que se invoca, parametriza o anida son los procedimientos y funciones son los procedimientos y funciones que contieneque contiene

  • PackagesPackages4 EspecificacinEspecificacin

    CREATE PACKAGE nombre ASCREATE PACKAGE nombre AS --declaraciones de objetos y tipo --declaraciones de objetos y tipo pblicos pblicos--especificaciones de subprogramas--especificaciones de subprogramasEND [nombre]END [nombre]

  • PackagesPackages4 CuerpoCuerpo

    CREATE PACKAGE BODY nombre ASCREATE PACKAGE BODY nombre AS --declaraciones de objetos y tipos --declaraciones de objetos y tipos

    privados privados --cuerpos de subprogramas--cuerpos de subprogramas[BEGIN[BEGIN--sentencia de inicializacin]--sentencia de inicializacin]END [nombre]END [nombre]

  • PackagesPackages4 La especificacin mantiene La especificacin mantiene

    declaraciones pblicas, visibles a las declaraciones pblicas, visibles a las aplicacionesaplicaciones

    4 Los objetos declarados en la Los objetos declarados en la especificacin son pblicos:especificacin son pblicos:4pueden ser vistos por cualquier aplicacinpueden ser vistos por cualquier aplicacin4pueden ser vistos por cualquier pueden ser vistos por cualquier

    componente del paquete.componente del paquete.

  • PackagesPackages4 El cuerpo mantiene declaraciones El cuerpo mantiene declaraciones

    privadas y detalles de privadas y detalles de implementacin,ocultas a las implementacin,ocultas a las aplicacionesaplicaciones

    4 Es opcional: si el paquete solo define Es opcional: si el paquete solo define tipos y objetos es innecesariotipos y objetos es innecesario

    4 Contiene un bloque de sentencias de Contiene un bloque de sentencias de inicializacin que se ejecuta por inicializacin que se ejecuta por sesin, la primera vez que se invoca sesin, la primera vez que se invoca algo del paquete.algo del paquete.

  • PackagesPackages4 La especificacin y el cuerpo son La especificacin y el cuerpo son

    objetos diferentes en la base de datosobjetos diferentes en la base de datos4 Es posible alterar e incluso borrar el Es posible alterar e incluso borrar el

    cuerpo de un paquete sin alterar la cuerpo de un paquete sin alterar la especificacinespecificacin

    4 Las aplicaciones que invocan tipos, Las aplicaciones que invocan tipos, objetos y subprogramas siguen objetos y subprogramas siguen compilando an cuando el cuerpo no compilando an cuando el cuerpo no este correctoeste correcto

  • PackagesPackages4 Los objetos declarados en la Los objetos declarados en la

    especificacin son pblicos (especificacin son pblicos (publicpublic): ): pueden ser accedidos desde cualquier pueden ser accedidos desde cualquier aplicacinaplicacin

    4 Los objetos declarados en el cuerpo Los objetos declarados en el cuerpo son privados (son privados (privateprivate): slo pueden ): slo pueden ser accedidos por otras componentes ser accedidos por otras componentes del cuerpo del paquetedel cuerpo del paquete

  • PackagesPackages4 Para referenciar tipos, objetos y Para referenciar tipos, objetos y

    subprogramas de un paquete se subprogramas de un paquete se prefijan con el nombre del paquete y prefijan con el nombre del paquete y un punto:un punto:

    nombre_paquete.nombre_tiponombre_paquete.nombre_tiponombre_paquete.nombre_objetonombre_paquete.nombre_objeto

    nombre_paquete.nombre_subprogramnombre_paquete.nombre_subprogramaa

  • PackagesPackages4 Existe un paquete denominado Existe un paquete denominado standardstandard que define el ambiente que define el ambiente PL/SQLPL/SQL

    4 Este paquete declara tipos,objetos y Este paquete declara tipos,objetos y subprogramas que estn subprogramas que estn automticamente disponibles a automticamente disponibles a cualquier programa PL/SQLcualquier programa PL/SQL

    4 Por ejemplo, se define en este Por ejemplo, se define en este paquete la funcin ABS (valor paquete la funcin ABS (valor absoluto)absoluto)

  • PackagesPackages4 Los contenidos del paquete Los contenidos del paquete

    STANDARD son visibles directamenteSTANDARD son visibles directamente4 Por lo tanto, no es necesario prefijar a Por lo tanto, no es necesario prefijar a

    la componente con STANDARDla componente con STANDARD4 Si se redefine alguna componente a Si se redefine alguna componente a

    nivel local, esto sobreescribe al nivel local, esto sobreescribe al comportamiento del paquete comportamiento del paquete STANDARDSTANDARD

  • PackagesPackages4 Existen varios paquetes predefinidos Existen varios paquetes predefinidos

    por Oracle:por Oracle:4DBMS_STANDARDDBMS_STANDARD4DBMS_SQLDBMS_SQL4DBMS_ALERTDBMS_ALERT4DBMS_OUTPUTDBMS_OUTPUT4DBMS_PIPEDBMS_PIPE4UTIL_FILEUTIL_FILE

  • Cursores empaquetadosCursores empaquetados4 Es posible separar la especificacin de Es posible separar la especificacin de

    un cursor de su implementacin en un un cursor de su implementacin en un paquetepaquete

    4 De esta manera, es posible cambiar la De esta manera, es posible cambiar la implementacin del cursor sin implementacin del cursor sin cambiar su interfasecambiar su interfase

    4 Esto da mayor flexibiliad a las Esto da mayor flexibiliad a las aplicacionesaplicaciones

  • Cursores empaquetadosCursores empaquetados4 Para declarar un cursor en la Para declarar un cursor en la

    especificacin:especificacin:

    CREATE PACKAGE nombre ASCREATE PACKAGE nombre AS/*especificacin del cursor/*/*especificacin del cursor/*

    CURSOR nombre RETURN tipo_dato;CURSOR nombre RETURN tipo_dato;......END nombre;END nombre;

  • Cursores empaquetadosCursores empaquetados4 Para implementar el cursor en el Para implementar el cursor en el

    cuerpo del paquete:cuerpo del paquete:CREATE PACKAGE nombre ASCREATE PACKAGE nombre AS

    /*cuerpo del cursor/*/*cuerpo del cursor/*CURSOR nombre RETURN tipo_dato ISCURSOR nombre RETURN tipo_dato IS

    sentencia_select;sentencia_select;......END nombre;END nombre;

  • Sobrecarga de OperadoresSobrecarga de Operadores4 PL/SQL permite tener varios PL/SQL permite tener varios

    procedimientos o funciones con el procedimientos o funciones con el mismo nombre al mismo nivelmismo nombre al mismo nivel

    4 Esto se denomina sobrecarga de Esto se denomina sobrecarga de operadores (operadores (overloadingoverloading))

    4 Al mismo nivel significaAl mismo nivel significa4como procedimientos o funciones como procedimientos o funciones

    hermanos dentro del rea de hermanos dentro del rea de declaraciones del bloquedeclaraciones del bloque

    4dentro de un paquetedentro de un paquete

  • Sobrecarga de OperadoresSobrecarga de Operadores4 PL/SQL determina cual de ellos PL/SQL determina cual de ellos

    ejecutar de acuerdo al tipo de los ejecutar de acuerdo al tipo de los parmetrosparmetros

    4 procedimiento pprocedimiento p4procedure p(a number) is......end;procedure p(a number) is......end;4procedure p(a varchar2) is......end;procedure p(a varchar2) is......end;

  • Sobrecarga de OperadoresSobrecarga de Operadores4 La sobrecarga se puede realizar a La sobrecarga se puede realizar a

    nivel de tipos diferentes, pero no de nivel de tipos diferentes, pero no de tipos del mismo conjunto (ej: NUMBER tipos del mismo conjunto (ej: NUMBER y FLOAT)y FLOAT)

    4 En el paquete STANDARD existen En el paquete STANDARD existen operaciones sobreargadas (ej: operaciones sobreargadas (ej: TO_CHAR)TO_CHAR)

  • Estructuras de DatosEstructuras de Datos4 PL/SQL permite la construccin de PL/SQL permite la construccin de

    tipos definidos por el usuario por tipos definidos por el usuario por medio del constructor TYPEmedio del constructor TYPE

    4 El nuevo tipo declarado pasa a ser un El nuevo tipo declarado pasa a ser un tipo ms del lenguajetipo ms del lenguaje

    4 Es posible declarar variables de ese Es posible declarar variables de ese tipo de la misma forma en que se tipo de la misma forma en que se declara una variable de un tipo declara una variable de un tipo escalarescalar

  • Estructuras de DatosEstructuras de Datos4 La declaracin de tipos se realiza en la La declaracin de tipos se realiza en la

    zona de declaraciones, previamente a zona de declaraciones, previamente a la declaracin de variablela declaracin de variable

    4 PL/SQL provee tres constructores de PL/SQL provee tres constructores de nuevos tipos:nuevos tipos:4TABLETABLE4RECORDRECORD4REF CURSORREF CURSOR

  • Estructuras de DatosEstructuras de Datos4 Los objetos de tipo TABLE se Los objetos de tipo TABLE se

    denominan tablas PL/SQL denominan tablas PL/SQL 4 Estan compuestas de filas y poseen Estan compuestas de filas y poseen

    una clave primariauna clave primaria4 No es posibe manipularlas a traves de No es posibe manipularlas a traves de

    sentencias SQL. Se acceden como sentencias SQL. Se acceden como arreglos a travs de la clave primariaarreglos a travs de la clave primaria

  • Estructuras de DatosEstructuras de Datos4 Una tabla es una coleccin ordenada Una tabla es una coleccin ordenada

    de elementos del mismo tipode elementos del mismo tipo4 Cada elemento posee un ndice Cada elemento posee un ndice

    numrico que indica su posesin numrico que indica su posesin exacta en la tablaexacta en la tabla

    4 No poseen tamao fijo, cota inferior ni No poseen tamao fijo, cota inferior ni superiorsuperior

    4 No requieren que las posiciones sean No requieren que las posiciones sean consecutivas (sparsity) consecutivas (sparsity)

  • Estructuras de DatosEstructuras de Datos4 Para declarar un tipo tabla, la sintaxis Para declarar un tipo tabla, la sintaxis

    es:es:

    TYPE nombre_tipo IS TABLE OF TYPE nombre_tipo IS TABLE OF tipo_datotipo_dato

    [NOT NULL] INDEX BY BINARY INTEGER;[NOT NULL] INDEX BY BINARY INTEGER;

    donde tipo_dato puede serdonde tipo_dato puede ser4un tipo escalarun tipo escalar4un registro implcito a travs de un registro implcito a travs de

    ROWTYPEROWTYPE4un registro declarado previamenteun registro declarado previamente

  • Estructuras de DatosEstructuras de Datos4 Para referenciar un elemento de una Para referenciar un elemento de una

    tabla PL/SQL se debe acceder por el tabla PL/SQL se debe acceder por el ndice usando la sintaxis:ndice usando la sintaxis:

    variable_de_tipo_tabla (posicin);variable_de_tipo_tabla (posicin);

  • Estructuras de DatosEstructuras de Datos4 Es posible asignar una tabla a otra:Es posible asignar una tabla a otra:

    variable_de_tipo_tabla1:=variable_de_tipo_tavariable_de_tipo_tabla1:=variable_de_tipo_tabla2; bla2;

    4 Tambin es posible asignar un valor a Tambin es posible asignar un valor a una posicin determinada de la tabla:una posicin determinada de la tabla:

    variable_de_tipo_tabla(posicion):=expresion;variable_de_tipo_tabla(posicion):=expresion;

  • Estructuras de DatosEstructuras de Datos4 Una tabla tiene los siguientes Una tabla tiene los siguientes

    atributos:atributos:4EXISTS(n): devuelve TRUE si el n-simo EXISTS(n): devuelve TRUE si el n-simo

    elemento de la tabla existeelemento de la tabla existe4COUNT: devuelve la cantidad de COUNT: devuelve la cantidad de

    elementos de la tablaelementos de la tabla4FIRST: devuelve el primer elemento de la FIRST: devuelve el primer elemento de la

    tabla (aquel con menor ndice)tabla (aquel con menor ndice)4LAST: devuelve el ltimo elemento de la LAST: devuelve el ltimo elemento de la

    tablatabla

  • Estructuras de DatosEstructuras de Datos4PRIOR(n): devuelve el nmero de ndice PRIOR(n): devuelve el nmero de ndice

    del elemento previo al n-simo elementodel elemento previo al n-simo elemento4NEXT(n): devuelve el nmero de ndice NEXT(n): devuelve el nmero de ndice

    del elemento posterior al n-simo del elemento posterior al n-simo elementoelemento

    4DELETE: borra elementos de 3 formas:DELETE: borra elementos de 3 formas:4 DELETE: borra todos los elementos de la tablaDELETE: borra todos los elementos de la tabla4 DELETE(n): borra el n-simo elementoDELETE(n): borra el n-simo elemento4 DELETE(m,n): borra todos los elementos en el DELETE(m,n): borra todos los elementos en el

    rango de ndices n..mrango de ndices n..m

  • Estructuras de DatosEstructuras de Datos4 Para aplicar un atributo a una tabla, Para aplicar un atributo a una tabla,

    se utiliza la notacion:se utiliza la notacion:

    variable_de_tipo_tabla.atributo variable_de_tipo_tabla.atributo

    4 Si se accede por un ndice a un Si se accede por un ndice a un elemento no definido se produce la elemento no definido se produce la excepcionexcepcion

    NO_DATA_FOUNDNO_DATA_FOUND

  • Estructuras de DatosEstructuras de Datos4 Un registro es una coleccin de Un registro es una coleccin de

    objetos de diferentes tipos agrupados objetos de diferentes tipos agrupados bajo un mismo nombrebajo un mismo nombre

    4 Dos formas de definir variables de tipo Dos formas de definir variables de tipo registro:registro:4implcitamente a traves de %ROWTYPEimplcitamente a traves de %ROWTYPE4explcitamente mediante la declaracin explcitamente mediante la declaracin

    de un tipo RECORD por medio de TYPEde un tipo RECORD por medio de TYPE

  • Estructuras de DatosEstructuras de Datos4 Para declarar un tipo registro se utiliza Para declarar un tipo registro se utiliza

    la sintaxis:la sintaxis:TYPE nombre_tipo IS RECORD TYPE nombre_tipo IS RECORD

    (campo[,campo....]);(campo[,campo....]);donde campo tiene la formadonde campo tiene la forma

    nombre tipo_dato[[NOT NULL](:=|nombre tipo_dato[[NOT NULL](:=|DEFAULT) exprDEFAULT) expr

  • Estructuras de DatosEstructuras de Datos4 Es posible construir registros Es posible construir registros

    anidados: un campo puede ser a su anidados: un campo puede ser a su vez un registrovez un registro

    4 Para referenciar un campo de Para referenciar un campo de registros se utiliza la sintaxis:registros se utiliza la sintaxis:

    variable_de_tipo_registro.nombre_campvariable_de_tipo_registro.nombre_campoo

  • Estructuras de DatosEstructuras de Datos4 Se puede asignar un registro a otro:Se puede asignar un registro a otro:

    variable_de_tipo_registro1:=variable_de_tipo_registrovariable_de_tipo_registro1:=variable_de_tipo_registro2;2;

    4 Se puede asignar un valor a un campo Se puede asignar un valor a un campo determinado del registro:determinado del registro:

    variable_de_tipo_registro.campo:=expresion;variable_de_tipo_registro.campo:=expresion;

  • Estructuras de DatosEstructuras de Datos4 Se pueden declarar variables de Se pueden declarar variables de

    cursorcursor4 Estas variables, como los cursores, Estas variables, como los cursores,

    apuntan a la fila actual del rea de apuntan a la fila actual del rea de trabajo asociadatrabajo asociada

    4 Diferencia con los cursores:Diferencia con los cursores:4los cursores son estticoslos cursores son estticos4las variables son dinmicas no estan las variables son dinmicas no estan

    asociadas a una consulta especficaasociadas a una consulta especfica4 Es posible abrir una variable de cursor Es posible abrir una variable de cursor

    para cualquier consulta de tipo para cualquier consulta de tipo compatible compatible

  • Estructuras de DatosEstructuras de Datos4 Las variables de cursor son como Las variables de cursor son como

    punteros: guardan la direccin de punteros: guardan la direccin de memoria de un cursormemoria de un cursor

    4 Una variable de cursor tiene tipo REF Una variable de cursor tiene tipo REF CURSORCURSOR

    4 Estn disponibles en cualquier Estn disponibles en cualquier mquina PL/SQL, ya sea un cliente o mquina PL/SQL, ya sea un cliente o servidorservidor

  • Estructuras de DatosEstructuras de Datos4 Se utilizan para pasar resultados de Se utilizan para pasar resultados de

    consultas entre el servidor y consultas entre el servidor y diferentes aplicaciones clientediferentes aplicaciones cliente

    4 Un rea de trabajo permanece Un rea de trabajo permanece accesible mientras haya una variable accesible mientras haya una variable de cursor apuntando hacia ellade cursor apuntando hacia ella

    4 No hay limitaciones de uso entre No hay limitaciones de uso entre clientes y servidorclientes y servidor

  • Estructuras de DatosEstructuras de Datos4 Para declarar un tipo REF CURSOR se Para declarar un tipo REF CURSOR se

    utiliza la sintaxis:utiliza la sintaxis:

    TYPE nombre IS REF CURSOR [RETURN TYPE nombre IS REF CURSOR [RETURN tipo]tipo]

    donde tipo representa un tipo registrodonde tipo representa un tipo registro4declarado implcitamente por %ROWTYPEdeclarado implcitamente por %ROWTYPE4declarado explcitamentedeclarado explcitamente

  • Estructuras de DatosEstructuras de Datos4 Si se declara un tipo de retorno el tipo Si se declara un tipo de retorno el tipo

    es fuerte (strong), en otro caso es es fuerte (strong), en otro caso es dbil (weak)dbil (weak)

    4 Un tipo fuerte da mayor seguridad y Un tipo fuerte da mayor seguridad y un tipo dbil da mayor flexibilidadun tipo dbil da mayor flexibilidad

    4 Si se producen errores de tipos se Si se producen errores de tipos se dispara la excepcin INVALID_CURSORdispara la excepcin INVALID_CURSOR

  • Estructuras de DatosEstructuras de Datos4 Es posible manipular una variable de Es posible manipular una variable de

    tipo cursor con las sentencias:tipo cursor con las sentencias:4OPEN cursor FOR sentenciaOPEN cursor FOR sentencia4FETCH cursor INTO variable,..,variableFETCH cursor INTO variable,..,variable4CLOSE cursorCLOSE cursor

    4 A una variable de tipo cursor no se le A una variable de tipo cursor no se le pueden pasar parmetrospueden pasar parmetros

  • Estructuras de DatosEstructuras de Datos4 Es posible manipular una variable de Es posible manipular una variable de

    tipo cursor con las sentencias:tipo cursor con las sentencias:4OPEN cursor FOR sentenciaOPEN cursor FOR sentencia4FETCH cursor INTO variable,..,variableFETCH cursor INTO variable,..,variable4CLOSE cursorCLOSE cursor

    4 A una variable de tipo cursor no se le A una variable de tipo cursor no se le pueden pasar parmetrospueden pasar parmetros

  • Triggers de la Base de Triggers de la Base de datosdatos

    4 Un trigger es un bloque PL/SQL Un trigger es un bloque PL/SQL asociado con una tablaasociado con una tabla

    4 Oracle ejecuta automticamente un Oracle ejecuta automticamente un trigger cuando se realiza una trigger cuando se realiza una operacin SQL especfica en la tablaoperacin SQL especfica en la tabla

    4 Un trigger es un objeto almacenado Un trigger es un objeto almacenado por lo que debe ser creado usando la por lo que debe ser creado usando la sentencia:sentencia:CREATE TRIGGERCREATE TRIGGER

  • Triggers de la Base de Triggers de la Base de datosdatos

    4 La sintaxis de la sentencia CREATE La sintaxis de la sentencia CREATE TRIGGER es:TRIGGER es:

  • Triggers de la Base de Triggers de la Base de datosdatos

    4 BEFORE: indica que el trigger se BEFORE: indica que el trigger se dispara antes de ser realizada la dispara antes de ser realizada la operacinoperacin

    4 AFTER: indica que el trigger se dispara AFTER: indica que el trigger se dispara despus de realizada la operacindespus de realizada la operacin

    4 La operacin puede ser La operacin puede ser DELETE,INSERT o UPDATEDELETE,INSERT o UPDATE

    4 En UPDATE se puede pedir que se En UPDATE se puede pedir que se dispare solo cuando cambian las dispare solo cuando cambian las columnas dadascolumnas dadas

  • Triggers de la Base de Triggers de la Base de datosdatos

    4 Para referenciar a los valores nuevos Para referenciar a los valores nuevos de la fila que est siendo modificada o de la fila que est siendo modificada o insertada se utiliza:NEW.columnainsertada se utiliza:NEW.columna

    4 Para referenciar a los valores viejos de Para referenciar a los valores viejos de la fila que est siendo modificada o la fila que est siendo modificada o borrada se utiliza :OLD.columnaborrada se utiliza :OLD.columna

    4 Tanto NEW como OLD se pueden Tanto NEW como OLD se pueden nombrar por medio de REFERENCINGnombrar por medio de REFERENCING

  • Triggers de la Base de Triggers de la Base de datosdatos

    4 Un trigger puede ser disparado:Un trigger puede ser disparado:4una vez para toda la sentencia (default)una vez para toda la sentencia (default)4una vez para cada fila involucrada en la una vez para cada fila involucrada en la

    sentencia (FOR EACH ROW)sentencia (FOR EACH ROW)4 OLD y NEW se utilizan en triggers de OLD y NEW se utilizan en triggers de

    filafila4 Es posible pedir que el trigger se Es posible pedir que el trigger se

    dispare solo cuando se cumple una dispare solo cuando se cumple una condicin mediante la clusula WHENcondicin mediante la clusula WHEN

  • Triggers de la Base de Triggers de la Base de datosdatos

    4 Aplicaciones de triggers:Aplicaciones de triggers:4Auditora sofisticadaAuditora sofisticada4Validaciones no estructuralesValidaciones no estructurales4Derivacin automtica de valores de Derivacin automtica de valores de

    columnascolumnas4Seguridad ms complejaSeguridad ms compleja4Tablas replicadasTablas replicadas

    4 Un trigger puede ser Un trigger puede ser habilitado(ENABLE) o deshabilitado habilitado(ENABLE) o deshabilitado (DISABLE)(DISABLE)

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69Slide 70Slide 71Slide 72Slide 73Slide 74Slide 75Slide 76Slide 77Slide 78Slide 79Slide 80Slide 81Slide 82Slide 83Slide 84Slide 85Slide 86Slide 87Slide 88Slide 89


Recommended