PRÁCTICA T2. El lenguaje procedural PL/SQL de Oracle

Documentos relacionados
Oracle PL/SQL. Programa de Estudio.

Funciones, procedimientos y cursores en Oracle

Introducción a PL/SQL

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

PRÓLOGO... XI CAPÍTULO 1. FUNDAMENTOS DEL LENGUAJE PL/SQL.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Tema 1. Bases de datos activas

GUIA 3 PARTE II. Introducción a PL/SQL

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Triggers. Carmen Hernández Triggers y PL/SQL 2

Oracle básico (IV): Programación en PL/SQL

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

1. Introducción al PL/SQL 2. Conceptos Básicos de PL/SQL Estructura de Bloques Reglas y Convenciones del Lenguaje

Introducción a PL/SQL

Lic. Vladimir Cotaquispe Gutierrez PROGRAMACIÓN PL/SQL I - 1. Copyright 2008, Oracle. All rights reserved.

Los disparadores pueden ser utilizados para cumplir con alguna de las siguientes tareas:

Declaración de Variables. Copyright Oracle Corporation, All rights reserved.

PRÓLOGO... XI CAPÍTULO 1. FUNDAMENTOS DEL LENGUAJE PL/SQL.

Introducción al lenguaje PL/SQL

Manual de desarrollo en PL/SQL

Cadena de caracteres Numéricas Fecha y hora Booleanas Tipo registro Tipo cursor

PL SQL -Oracle. Índice. Miguel Ángel Manso ETSI en Topografía, Geodesia y Cartografía - UPM. Qué es PL/SQL? Qué permite?

Para ver una copia completa de la licencia, acudir a la dirección

Cursores, Triggers, Indices, Transacciones, Vistas Gestión y Modelación de Datos

Disparadores en Oracle (Ejemplos Prácticos)

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

UNIDAD DE TRABAJO 3: PROGRAMACIÓN DE BASES DE DATOS TEMA 8: INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Cursores Explícitos. Copyright Oracle Corporation, All rights reserved.

Programación SQL. Lucio Salgado Diciembre 2008

ÍNDICE INTRODUCCIÓN...13

Oracle Database: Programación con PL/SQL

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Introducción a PL/SQL

Programando con PL/SQL en una Base de Datos Oracle

Triggers (o disparadores) Definición y sintaxis

Conceptos básicos de programación con PL/SQL

Sistemas Gestores de Bases de Datos Tema 8: Fundamentos de PL/SQL

Estándares para la construcción de Sentencias SQL

INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN PL/SQL CURSORES

Funciones, procedimientos, secuencias y cursores en Oracle

CAPÍTULO 1: INTRODUCCIÓN A PL/SQL...2

Repaso. Laboratorio Informix. Stored Procedures. Ejemplo. Creación de stored procedures. Sql en un Procedimiento

Desarrollo de Aplicaciones Informáticas

Laboratorio Informix. Stored Procedures Triggers

Conceptos básicos de programación con PL/SQL

Base de Datos Oracle 10g: Programación con PL/SQL Código: D Duración: 5 días (40 horas)

Disparadores en ORACLE

Para abordar el presente tutorial con mínimo de garantías es necesario conocer previamente SQL.

Desarrollo de Aplicaciones Informáticas

PRÁCTICA III. DISPARADORES EN SQL (II)

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

Enlaces relacionados:

Procesamiento Condicional con Sentencias IF Procesamiento Condicional con Sentencias CASE Sentencia Loop Simple Sentencia WhileLoop Sentencia ForLoop

Departamento de Lenguajes y Sistemas Informáticos

Diseño de bases de datos

Triggers en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

PG/PLSQL. Miguel Ángel Manso ETSI en Topografía, Geodesia y Cartografía - UPM

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Bibliografía Oracle Database Concepts - 10g Release 2 (10.2) (Octubre 2005)

PL/PGSQL. Extensión "procedural" de SQL

Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Examen de Bases de datos Grado de Ingeniería en Informática, Febrero, 2015

Procedimientos almacenados en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

EXAMEN: BASES DE DATOS 4º Ingeniería Informática (31 de enero de 2008)

Desarrollo y explotación de aplicaciones empresariales con base de datos Oracle: Julio de 2004

Capítulo 8. Construcción de guiones

Para crear una función o un procedimiento se deben usar las instrucciones CREATE FUNCTION o CREATE PROCEDURE.

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

Un ejemplo teórico de trigger podría ser éste:

Lenguaje SQL (2ª Parte) Definición de datos

Curso de Oracle Database 11g: PL/SQL

Otros objetos de Base de Datos

Funciones y paquetes PL/SQL. Jonathan Medina Gómez Facultad de ingeniería Universidad de Antioquia

Oracle Database 11g: Conceptos Fundamentales de SQL y PL/SQL Nuevo

PL/SQL. DECLARE /* Parte Declarativa */ BEGIN /* Parte de Ejecución */ EXCEPTION /* Parte de Excepciones */ END;

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos.

Diseño de bases de datos Práctica-1 Definición de datos

BASES DE DATOS ACTIVAS

1. Motivación: comportamientos activos. 2. Reglas ECA. Ejemplos BASES DE DATOS ACTIVAS. Las BD tradicionales se consideran pasivas

Laboratorios de BASES DE DATOS. (I.T. Informática)

Gestión de nóminas diciembre 2011

Tema 1. Bases de datos activas

INST Estándar Codificación SQL y PL-SQL

Introducción al SQL embebido

Tutorial Oracle SQL Developer 1.2.1

Haga clic para PostgreS cambiar el estilo

ÍNDICE PRIMERA PARTE... 17

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Sintaxis: CURSOR nombre_cursor[(param1 [IN] tipo1,... )] IS consulta ;

Transcripción:

3º Ingeniero Técnico en Informática de Sistemas Asignatura: Fundamentos de Bases de Datos Curso: 2007/8 PRÁCTICA T2. El lenguaje procedural PL/SQL de Oracle Objetivos Conocer los conceptos y estructuras de programación ofrecidas por PL/SQL, la extensión procedural del SQL de Oracle: estructuras de selección e iteración, cursores, excepciones, bloques anónimos de código, procedimientos, funciones, paquetes (packages), disparadores (triggers), etc. Modalidad: laboratorio cerrado (tutorial) Material de Ayuda Ejemplos de PL/SQL. (en la página siguiente) Manual de referencia PL/SQL. Manual de referencia de Oracle 10g acerca de creación de procedimientos, funciones y paquetes, sobre el manejo de la salida para procedimientos y disparadores (triggers), y algunos ejemplos de programas. 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 1

Ejemplos de PL/SQL - PL/SQL es una extensión procedural de SQL. Está integrado en el núcleo del RDBMS ORACLE. - Un bloque PL/SQL consta de 3 secciones [] Definición de variables, cursores,... Cuerpo [EXCEPTION] Excepciones END - Constantes y variables. - Tipos de datos NUMBER CHAR (longitud fija) VARCHAR2 (longitud variable) - Concatenación DATE - Funciones sobre fechas BOOLEAN (es un tipo PL/SQL, no de BD). - Declaración implícita del tipo de datos. - Atributo %TYPE - var1 var2%type - var tabla.campo%type - Atributo %ROWTYPE (declaración de registros) - var tabla%rowtype - var cursor%rowtype - Bucles FOR - Cursores. - Implícitos. - Manejados (abiertos y cerrados) automáticamente. - Nombre predefinido SQL. - INSERT, UPDATE, DELETE y SELECT monoregistro. - Explícitos. - SELECT multiregistro. - Atributos de los cursores implícitos. - SQL%NOTFOUND - SQL%FOUND - SQL%ROWCOUNT - SQL%ISOPEN 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 2

- Operaciones con cursores explícitos. - - Cursores con parámetros. - Cursores SELECT.. FOR UPDATE - UPDATE o DELETE... WHERE CURRENT OF - OPEN - Aún no hay filas disponibles. - FETCH - FETCH cursor INTO lista de variables - FETCH cursor INTO registro - CLOSE - Atributos de los cursores explícitos. - cursor%notfound - cursor%found - cursor%rowcount - cursor%isopen - Bucles FOR CURSOR. FOR var IN cursor [(lista de parámetros] LOOP... - Estructuras de programación. - Seleccion. - IF... THEN... ELSIF... END IF; - IS [NOT] NULL - IS [NOT] LIKE - Iteración (bucles) - Bucles LOOP LOOP... - Sentencia EXIT EXIT [WHEN condición_booleana]; - Bucles FOR LOOP FOR var IN [REVERSE] exp1..exp2 LOOP... - Bucles WHILE LOOP WHILE expresión_booleana LOOP... - Bucles FOR cursor. - Estructura de un bloque PL/SQL [] Declaración de constantes, variables, cursores y excepciones. Aquí puede anidarse otro bloque [EXCEPTION] Aquí puede anidarse otro bloque - Visibilidad de los identificadores. - La normal de LPs con estructura de bloques. 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 3

- DML desde bloques PL/SQL. - SELECT lista de campos INTO lista de variables FROM tablas... - UPDATE... WHERE CURRENT OF cursor - DELETE... WHERE CURRENT OF cursor - COMMIT y ROLLBACK. - Manejo de excepciones. - WHEN excepción then tratamiento. - Excepciones predefinidas: NO_DATA_FOUND, DUP_VAL_ON_INDEX, TOO_MANY_ROWS, ZERO_DIVIDE, OTHERS,... - Definición de excepciones. excepción EXCEPTION; - Provocar (elevar) excepciones. RAISE excepción raise_application_error(-20011, 'Mensaje error ) - Activar la impresión por pantalla Escribir en SQL*PLUS, SET SERVEROUTPUT ON - Impresión por pantalla DBMS_OUTPUT.DISABLE; DBMS_OUTPUT.ENABLE (1000000); DBMS_OUTPUT.PUT_LINE ( texto ); DBMS_OUTPUT.PUT ( texto ); DBMS_OUTPUT.NEW_LINE; - Cómo probar el correcto funcionamiento de un procedimiento Llamada al procedimiento; - Cómo probar el correcto funcionamiento de una función DBMS_OUTPUT.PUT_LINE (llamada a la función); 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 4

- NIF_ VARCHAR2(10); NOMBRE_ EMPLEADOS.NOMBRE%TYPE; EMP_ EMPLEADOS%ROWTYPE; CURSOR C_EMPLEADOS IS SELECT NIF, NOMBRE FROM EMPLEADOS FOR UPDATE OF SUELDO; EMP1_ C_EMPLEADOS%ROWTYPE; DBMS_OUTPUT.DISABLE; DBMS_OUTPUT.ENABLE (1000000); OPEN C_EMPLEADOS; LOOP FETCH C_EMPLEADOS INTO NIF_, NOMBRE_; EXIT WHEN C_EMPLEADOS%NOTFOUND; DBMS_OUTPUT.PUT_LINE (NOMBRE_); CLOSE C_EMPLEADOS; FOR I IN C_EMPLEADOS LOOP UPDATE EMPLEADOS SET SUELDO = SUELDO*1.10 WHERE CURRENT OF C_EMPLEADOS; IF (SQL%NOTFOUND) THEN RAISE... END IF; DBMS_OUTPUT.PUT (I.NOMBRE); DBMS_OUTPUT.PUT (I.SUELDO); DBMS_OUTPUT.NEW_LINE; - CREATE FUNCTION EXISTE_EMPLEADO ( NIF_ IN VARCHAR2 ) RETURN BOOLEAN IS X CHAR(1); SORPRESA EXCEPTION; SELECT 'X' INTO X FROM EMPLEADOS WHERE NIF = NIF_; RETURN (TRUE); EXCEPTION WHEN NO_DATA_FOUND THEN RETURN (FALSE); WHEN TOO_MANY_ROWS THEN RETURN (TRUE); WHEN OTHERS THEN RAISE SORPRESA; 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 5

- CREATE TRIGGER COMPROBAR_SUELDO BEFORE INSERT OR UPDATE OF SALARIO, PUESTO ON EMPLEADOS FOR EACH ROW WHEN (NEW.PUESTO <> 'PRESIDENTE') SUELDO_FUERA_RANGO EXCEPTION; IF (:NEW.SALARIO < 100000 OR :NEW.SALARIO > 1000000) THEN RAISE SUELDO_FUERA_RANGO; END IF; - CREATE PACKAGE emp_actions AS package specification PROCEDURE hire_employee (emp_id INTGER, name VARCHAR2,...); PROCEDURE fire_employee (emp_id INTEGER); PROCEDURE raise_salary (emp_id INTEGER, increase REAL);... END emp_actions; - CREATE PACKAGE BODY emp_actions AS package body PROCEDURE hire_employee (emp_id INTGER, name VARCHAR2,...) IS INSERT INTO emp VALUES (empno, ename,...); END hire_employee; PROCEDURE fire_employee (emp_id INTEGER) IS DELETE FROM emp WHERE empno = emp_id; END fire_employee; PROCEDURE raise_salary (emp_id INTEGER, increase REAL) IS salary REAL; SELECT sal INTO salary FROM emp WHERE empno = emp_id;... END raise_salary;... END emp_actions; 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 6

- CURSOR CDEP IS SELECT * FROM DEPARTAMENTOS ORDER BY CODDEP; CURSOR CEMP (CODDEP_ DEPARTAMENTOS.CODDEP%TYPE) IS SELECT * FROM EMPLEADOS WHERE CODDEP = CODDEP_ ORDER BY CODEMP; FOR I IN CDEP LOOP DBMS_OUTPUT ( DEPARTAMENTO I.CODDEP); FOR J IN CEMP (I.CODDEP) LOOP DBMS_OUTPUT ( EMPLEADO J.CODEMP); - CURSOR CPROF IS SELECT NIF, NOMBRE FROM PROFESORES ORDER BY NIF; CURSOR CALUM IS SELECT NIF, NOMBRE FROM ALUMNOS ORDER BY NIF; RPROF CPROF%ROWTYPE; RALUM CALUM%ROWTYPE; OPEN CPROF; OPEN CALUM; LOOP FETCH CPROF INTO RPROF; FETCH CALUM INTO RALUM; EXIT WHEN (CPROF%NOTFOUND OR CALUM%NOTFOUND); DBMS_OUTPUT.PUT_LINE (RPROF.NIF, RALUM.NIF); IF (CPROF%FOUND) THEN LOOP DBMS_OUTPUT.PUT_LINE (RPROF.NIF, ); FETCH CPROF INTO RPROF; EXIT WHEN CPROF%NOTFOUND; END IF; WHILE CALUM%FOUND) LOOP DBMS_OTUPUT.PUT_LINE (, RALUM.NIF); FETCH CALUM INTO RALUM; CLOSE CPROF; CLOSE CALUM; 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 7

- PROCEDURE INSERTAR_O_ACTUALIZAR ( NIF_ IN EMPLEADOS.NIF%TYPE; NOMBRE_ IN EMPLEADOS.NOMBRE%TYPE; ) IS OPCION A - X CHAR(1); SELECT X INTO X FROM EMPLEADOS WHERE NIF = NIF_; UPDATE EMPLEADOS SET NOMBRE = NOMBRE_ WHERE NIF = NIF_; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO EMPLEADOS (NIF, NOMBRE) VALUES (NIF_, NOMBRE_); OPCION B - INSERT INTO EMPLEADOS (NIF, NOMBRE) VALUES (NIF_, NOMBRE_); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN UPDATE EMPLEADOS SET NOMBRE = NOMBRE_ WHERE NIF = NIF_; OPCION C - UPDATE EMPLEADOS SET NOMBRE = NOMBRE_ WHERE NIF = NIF_; IF (SQL%NOTFOUND) THEN INSERT INTO EMPLEADOS (NIF, NOMBRE) VALUES (NIF_, NOMBRE_); END IF; 3º ITI de Sistemas. Fundamentos des Bases de Datos. Práctica B3. El lenguaje procedural PL/SQL de Oracle - 8