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



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

Base de datos Oracle: Arquitectura Oracle. Arquitectura. Marzo Luis Vinuesa Martínez

ÍNDICE INTRODUCCIÓN...13

Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando su:

Oracle 12c DISEÑO Y PROGRAMACIÓN

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

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

1

DIPLOMADO EN BASE DE DATOS ORACLE

Fundamentos de Oracle

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

8 SQL SERVER 2008 RA-MA

Diseño de bases de datos

PROGRAMAS DE ESTUDIO FORMATO 7 INTRODUCCIÓN A SQL. Área de Formación Profesional

SQL Los fundamentos del lenguaje

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

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

Unidad III: Lenguaje de manipulación de datos (DML) 3.1 Inserción, eliminación y modificación de registros

Estructura de una BD Oracle. datafiles redo log controlfiles tablespace objetos Estructura lógica. Tablespaces tablespace SYSTEM

Procedimientos, Funciones, Trigger y Cursores en ORACLE

E16 - Diseño de Sistemas de Bases de Datos Boletín 3

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

SQL (Structured Query Language)

PRÁCTICA III. DISPARADORES EN SQL (II)

INSTITUTO DE EDUCACIÓN SUPERIOR TECNOLÓGICO IBEROTEC SEMESTRE ACADÉMICO: 2014-II SÍLABO

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

Tema 1. Bases de datos activas

Tema 4. Manipulación de datos con SQL

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

Desarrollo de Aplicaciones Informáticas

Índice. iii. Objetivos... 24

ÍNDICE PRIMERA PARTE... 17

Unidad. Lenguaje SQL. (Structured Query Language)

Dirigido a Profesionales y técnicos de informática que se inicien en el manejo de la base de datos Oracle 11g

Introducción a Oracle PL / SQL 12c

Tutorial de SQL - El comando SELECT

Disparadores en ORACLE

Programación SQL. Lucio Salgado Diciembre 2008

: COMPUTACIÓN E INFORMATICA : Ingeniería de Software Ingeniería de Redes y Comunicaciones : Administración de Bases de Datos I : T-INF127

ÍNDICE CAPÍTULO 1. TIPOS DE ALMACENAMIENTO DE LA INFORMACIÓN... 13

Oracle PL/SQL. Programa de Estudio.

1. DML. Las subconsultas

Entrarás a formar parte de nuestra bolsa de empleo a la que acuden las empresas en busca de nuestros alumnos.

MySQL 5 (versiones 5.1 a 5.6) Guía de referencia del desarrollador

CURSO DE SQL SERVER 2005

Componentes de una BD

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

Consultas con combinaciones

Decimocuartas Jornadas en Estadística e Informática. Ricardo Vergara Argudo ricardo.vergara@sasf.net

Estructura general. Fundamentos. Comentarios. Tipos de datos. Funciones de conversión

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

Tema 1. Bases de datos activas

III. ADMINISTRACIÓN DE ORACLE.

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

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

Administración Básica de Oracle9i.

UNIDAD 1.- PARTE 1 MANIPULACIÓN AVANZADA DE DATOS CON SQL. BASES DE DATOS PARA APLICACIONES. Xochitl Clemente Parra Armando Méndez Morales

ADMINISTRACION DE BASES DE DATOS EN ORACLE

8283: Administración y programación en Microsoft SQL Server 2012

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

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

Disparadores en Oracle (Ejemplos Prácticos)

A.1. Definiciones de datos en SQL

Sistema Gestor de Bases de Datos Relacionales (SGBDR), que maneja distintos tipos de datos:

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

Programando con PL/SQL en una Base de Datos Oracle

Bases de Datos Relacionales

Sub consultas avanzadas

Curso Online de Oracle 10g

Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT

Oracle Database 12c SQL and PLSQL Fundamentals

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

Administración de Bases de Datos

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

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

ACERCA DE LOS AUTO RES... III AGRADECIMIENTOS... xi INTRODUCCION... Xl

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

Clase 1: Estructuras, Procesos y Diccionario de Datos

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

Laboratorio Informix. Stored Procedures Triggers

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

BANCO DE PREGUNTAS PARA EVALUACIÓN DE CONOCIMIENTOS DEL CONCURSO DE MÉRITOS Y OPOSICIÓN EXPERTO EN DESARROLLO DE SISTEMAS 1

Creación y Gestión de Tablas. Copyright Oracle Corporation, All rights reserved.

ADMINISTRACIÓN DE BASES DE DATOS PREGUNTAS TEST SON SOLUCIÓN

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

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

Grupo Kybele, Pág. 1

MANUAL BÁSICO DEL LENGUAJE SQL

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

Funciones y TriggersIntroducción, Ejemplos

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

Enlaces relacionados:

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

- Bases de Datos - - Diseño Físico - Luis D. García

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

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

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

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

SQL Server SQL, Transact SQL Diseño y creación de una base de datos

Transcripción:

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

Presentación del curso 2

Presentación Director Luis Vinuesa Martínez Profesores Alberto Manuel Fernández Álvarez Ángel Lombas Fernández Luis Vinuesa Martínez 3

Presentación Asistencia obligatoria (80%) Evaluación Trabajo individual (propuesto por los profesores o por el alumno, con aprobación por parte de los profesores) Mail del curso curso_oracle90@terra.es 4

Presentación Calendario Entrega de prácticas Plazos Elección de práctica Calificaciones Software 5

Presentación Directorio de trabajo Cread un directorio en el ordenador SOLO TRABAJAR EN ESTE DIRECTORIO. Página del curso www.di.uniovi.es/~vinuesa/cursos/curso_oracle/curso90.htm 6

Introducción 7

Introducción Bases de datos relacionales Conceptos Evolución Utilidad Situación actual SQL 8

Arquitectura Oracle 9

Arquitectura 10

Arquitectura Instancias Schema User/Password SQLNET o NET8 SQLNET LISTENER 11

Arquitectura - memoria SGA (Shared Global Area) Database Buffer/caché de buffer de base de datos Redo-log-buffer /caché de rehacer Shared Pool / área de agrupamiento compartido Dictionary cache /caché de diccionario Library cache (caché de SQL) PGA (Program/Process Global Area) 12

Arquitectura - procesos DBWR (database writer) LGWR (log writer) SMON (system monitor) PMON (process monitor) ARCH (archiver) CKPT (checkpoint process) 13

Arquitectura organización lógica Base de datos Tablespace (Espacio de tablas) Segmentos Extensiones (Extent) 14

Arquitectura Ficheros Datafiles/archivos de base de datos Bloques [Rowid] Control Files/archivos de control Redo-log Files/ficheros de rehacer Archive Log PFILE y SPFILE 15

Arquitectura - transacciones Commit Rollback DML explícito DDL implícito 16

Arquitectura seguridad Usuarios Privilegios De sistema De objetos Roles Perfiles 17

Arquitectura - objetos Tablas Vistas Sinónimos Índices Clusters Database links Secuencias (sequence) Pseudocolumnas 18

Administración 19

Administración Servicios de Oracle Explicación de la arquitectura OEM 20

Arquitectura Práctica: Instalación del cliente Instalar: SQL+, oci, jdbc, odbc Configuración del sqlnet para la conexión a la base de datos (ficheros sqlnet.ora y tnsnames.ora) Conexión con el SQL+ Variable de entorno tns_admin (para el sqlnet) Edición del registro de Windows 21

Administración Práctica: OEM, creación de usuario Crear usuario de la BBDD con el role DBA (curso90/curso90) Crear usuario de oem con permiso de superadministrador (oem90/oem90) Entrar al oem con el usuario recién creado Crear un nuevo usuario (individual para cada uno, permisos dba) Conectarse con ese nuevo usuario 22

Administracion Práctica: OEM, uso http://156.35.150.125 (normalmente 3339) Descubrir nodos DBA studio: Creación de tablespaces Creación de datafiles Creación de usuarios 23

Administración Práctica: configuración de una instancia Modificación del init%.ora (instance manager) NLS_DATE_FORMAT = DD/MM/YYYY NLS_LANGUAGE = SPANISH NLS_TERRITORY = SPAIN UTL_FILE_DIR = * REMOTE_DEPENDENCIES_MODE = SIGNATURE/TIMESTAMP 24

Administración Práctica: Creación de nueva instancia Crear una nueva instancia Contraseñas estándar Comprobar el listener.ora Ver la estructura de directorios creada: oracle\admin y oracle\oradata y \database Configurar los clientes (sqlnet) para que se conecten a ella Configurar el oem para que se conecte a ella (primero rearrancar el Agent) 25

Administración Práctica Export Import SQL Loader 26

SQL Explotación de la Información 27

SQL Manejo del SQL+ Connect usuario[/contraseña][@string] Todas las sentencias acaban en ; Ed Ejecución de la ultima sentencia Manejo del ratón Desc Variables y parámetros 28

SQL Commit/Rollback Tabla dual Vista tabs Sysdate Valores nulos (null y NVL) Uso de comodines (% y _ ) TO_CHAR / TO_DATE / TO_NUMBER DECODE 29

SQL Tablas de ejemplo Tpais Tprovincia Tciudad Tcalle Tdomicilio Tpersona Tpersona_domicilio 30

SQL Uso de alias En las columnas En las tablas 31

SQL Consultas Order by Operadores Funciones Subconsultas Join Selfjoin Outer Join Group By Connect by Conjuntos 32

SQL ORDER BY La ordenación puede ser de distintos tipos, y depende de NLS_SORT ASC, DESC 33

SQL Operadores Precedencia Aritméticos (+,-,*,/) Concatenación ( ) Comparación(=,<>,>,<,IN, SOME, LIKE, BETWEEN, IS NULL...) Lógicos (AND, OR, NOT) Conjuntos (UNION [ALL], INTERSECT, MINUS) 34

SQL Funciones De un valor Numéricas De caracter De fecha De conversión Otras Agregación 35

SQL - subconsultas OPCIÓN A SELECT deptno FROM emp WHERE empno=7369; (resultado 20) SELECT empno FROM emp WHERE deptno=20; OPCIÓN B SELECT empno FROM emp WHERE deptno=(select deptno FROM emp WHERE empno=7369); 36

SQL - subconsultas La subconsulta puede aparecer en la cláusula WHERE y en la cláusula FROM Pueden devolver un valor único o una lista de valores. SELECT ename,deptno FROM emp WHERE (sal,deptno) IN (SELECT MAX(sal),deptno FROM emp GROUP BY deptno); 37

SQL - Joins Join Selfjoin Outer join 38

SQL - Joins SELECT e1.empno FROM emp e1 WHERE e1.deptno=(select deptno FROM emp WHERE empno=7369) SELECT e1.empno FROM emp e1, emp e2 WHERE e1.deptno=e2.deptno AND e2.empno=7369 39

SQL Group by Agrupa filas y devuelve información sumariada de cada grupo de filas. Necesaria cuando se desea recuperar valores de funciones de grupo (MAX; MIN, SUM, etc.) junto a valores no de grupo. 40

SQL GROUP BY SELECT deptno, MIN(sal), MAX (sal) FROM emp WHERE job = 'CLERK' GROUP BY deptno; SELECT deptno, MIN(sal), MAX (sal) FROM emp WHERE job = 'CLERK' GROUP BY deptno HAVING MIN(sal) < 1000; 41

SQL CONNECT BY Permite realizar consultas jerárquicas (árbol genealógico) SELECT LPAD(' ',6*(LEVEL-1)) ename nombre FROM emp START WITH job='president' CONNECT BY PRIOR empno = mgr; 42

SQL - Ejercicios Calles de Oviedo y de Gijón que empiecen por A o por C 43

SQL - Ejercicios Calles de Oviedo y de Gijón que empiecen por A o por C SELECT des_calle,des_ciudad FROM tcalle ca, tciudad ci WHERE ca.cod_pais=ci.cod_pais AND ca.cod_provincia=ci.cod_provincia AND ca.cod_ciudad=ci.cod_ciudad AND ca.cod_pais=3 --España AND ca.cod_provincia=2 -- Asturias AND (UPPER(ca.des_calle) LIKE 'A%' OR UPPER(ca.des_calle) LIKE 'C%') AND (UPPER(des_ciudad) LIKE '%OVIEDO' OR UPPER(des_ciudad) LIKE '%GIJON') 44

SQL - Ejercicios Personas con más de un domicilio 45

SQL - Ejercicios Personas con más de un domicilio SELECT DISTINCT(p.dni) FROM tpersona_domicilio p WHERE 1<(SELECT COUNT(*) FROM tpersona_domicilio p2 WHERE p.dni=p2.dni) SELECT p2.dni FROM tpersona_domicilio p2 GROUP BY p2.dni HAVING COUNT(*)>1 46

SQL - Ejercicios Nombre de ciudad, código, código de provincia y % total del calles que tiene esa ciudad sobre el total de calles de ciudades que tengan en su nombre la palabra AVILES, en España (cod_pais=3) 47

SQL - Ejercicios SELECT c.des_ciudad, c.cod_ciudad, c.cod_provincia,a.num_calles/b.total_calles "%calles" FROM (SELECT ca.cod_pais,ca.cod_ciudad,ca.cod_provincia, COUNT(*) num_calles FROM tcalle ca, tciudad ci WHERE ca.cod_pais=3 --España AND ca.cod_pais=ci.cod_pais AND ca.cod_provincia=ci.cod_provincia AND ca.cod_ciudad=ci.cod_ciudad AND des_ciudad LIKE '%AVILES' GROUP BY ca.cod_pais,ca.cod_ciudad,ca.cod_provincia) a, (SELECT COUNT(*) total_calles FROM tcalle ca,tciudad ci WHERE ca.cod_pais=3 /*España*/ AND ca.cod_pais=ci.cod_pais AND ca.cod_provincia=ci.cod_provincia AND ca.cod_ciudad=ci.cod_ciudad AND des_ciudad LIKE '%AVILES') b, tciudad c WHERE c.cod_pais=a.cod_pais AND c.cod_provincia=a.cod_provincia AND c.cod_ciudad=a.cod_ciudad 48

SQL - Ejercicios Obtener el nombre y código de la calle y la ciudad a la que pertenece que tiene el nombre más largo dentro de cada ciudad 49

SQL - Ejercicios SELECT des_calle, cod_calle, ca.cod_pais, ca.cod_provincia, ca.cod_ciudad FROM tcalle ca,( SELECT cod_pais, cod_provincia, cod_ciudad, MAX(LENGTH(des_calle)) longitud FROM tcalle GROUP BY cod_pais, cod_provincia, cod_ciudad) b WHERE b.cod_pais=ca.cod_pais AND b.cod_provincia=ca.cod_provincia AND b.cod_ciudad=ca.cod_ciudad AND LENGTH(des_calle)= longitud ORDER BY cod_pais, cod_provincia, cod_ciudad, des_calle; 50

SQL - Ejercicios Departamento con mayor número de empleados y el número de ellos 51

SQL - Ejercicios Departamento con mayor número de empleados y el número de ellos 52

SQL - Ejercicios SELECT deptno, cuantos FROM (SELECT deptno,count(*) cuantos FROM emp GROUP BY deptno) a WHERE cuantos=(select MAX(cuantos) FROM (SELECT deptno, COUNT(*) cuantos FROM emp GROUP BY deptno) a) SELECT * FROM (SELECT deptno, COUNT(*) cuantos FROM emp GROUP BY deptno ORDER BY cuantos DESC) a WHERE ROWNUM<2 53

SQL - Ejercicios Calle con mas domicilios de una ciudad dada (p.ej: cod_pais=1, cod_provincia=1 y cod_ciudad=1) 54

SQL - Ejercicios SELECT ca.cod_calle,des_calle,cuantos FROM tcalle ca, (SELECT cod_pais, cod_provincia, cod_ciudad, cod_calle, COUNT(*) cuantos FROM tdomicilio WHERE cod_pais=1 AND cod_provincia=1 AND cod_ciudad=1 GROUP BY cod_pais, cod_provincia, cod_ciudad, cod_calle) o WHERE ca.cod_pais=o.cod_pais AND ca.cod_provincia=o.cod_provincia AND ca.cod_ciudad=o.cod_ciudad AND ca.cod_calle=o.cod_calle AND o.cuantos=(select MAX(cuantos) FROM (SELECT cod_pais, cod_provincia, cod_ciudad, cod_calle, COUNT(*) cuantos FROM tdomicilio WHERE cod_pais=1 AND cod_provincia=1 AND cod_ciudad=1 GROUP BY cod_pais, cod_provincia, cod_ciudad, cod_calle) h) 55

SQL - Ejercicios Obtener la media de domicilios que hay por cada ciudad. 56

SQL - Ejercicios SELECT (SELECT COUNT(*) FROM tdomicilio) /(SELECT COUNT(*) FROM (SELECT cod_pais, cod_provincia, cod_ciudad FROM tdomicilio GROUP BY cod_pais, cod_provincia,cod_ciudad)) FROM dual; SELECT COUNT(*)/COUNT( DISTINCT cod_pais*10000000+cod_provincia*10000+cod_ciudad) FROM tdomicilio; SELECT AVG(cuantos) FROM (SELECT COUNT(*) cuantos FROM tdomicilio GROUP BY cod_pais,cod_provincia,cod_ciudad) b; 57

SQL - Ejercicios Obtener el total de domicilios que hay por país, por provincia, por ciudad y totales. 58

SQL - Ejercicios Obtener el total de domicilios que hay por país, por provincia, por ciudad y totales. SELECT DECODE(GROUPING(cod_pais),1,'Todos Paises',cod_pais), DECODE(GROUPING(cod_provincia),1,'Todas las provincias',cod_provincia), DECODE(GROUPING(cod_ciudad),1,'Todas las ciudades',cod_ciudad), COUNT(*) total_domicilios FROM tdomicilio GROUP BY ROLLUP (cod_pais,cod_provincia,cod_ciudad) 59

SQL - Ejercicios Obtener un árbol genealógico de los descendientes de la persona con DNI=200 60

SQL - Ejercicios Obtener un árbol genealógico de los descendientes de la persona con DNI=200 SELECT LPAD(' ',6*(LEVEL-1)) nombre FROM tpersona START WITH dni=200 CONNECT BY PRIOR dni = padre; 61

PL/SQL Explotación avanzada de la información 62

PL/SQL Bloque Tipos de datos Estructuras de control Sentencias SQL Transacciones Cursores Excepciones Subprogramas: Procedimientos y Funciones Packages Triggers Packages estándar 63

PL/SQL - Bloque DECLARE Declaración de Variables; BEGIN Sentencias Ejecutables; [EXCEPTION Declaración de Excepciones;] END; 64

PL/SQL Tipos de Datos Más usados NUMBER [(precisión,escala)] CHAR [(longitud_máxima)] VARCHAR2 [(longitud_máxima)] DATE BOOLEAN RECORD TABLE 65

PL/SQL Tipos de Datos Muy importantes: Variables y constantes: %TYPE y %ROWTYPE Sintaxis %TYPE: <nombre variable%type>; <nombre propietario.tabla.columna%type>; Sintaxis %ROWTYPE <nombre propietario.tabla.columna%rowtype>; 66

PL/SQL Tipos de Datos Tipo tabla: TYPE nombre IS TABLE OF {variable%type tipo_columna tabla.columna%type} [NOT NULL] INDEX BY BINARY_INTEGER; Tipo record: TYPE nombre IS RECORD (campo1 {tipo_dato variable%type tabla.columna%type tabla%rowtype} [NOT NULL], campo2 {tipo_dato variable%type tabla.columna%type tabla%rowtype} [NOT NULL],......); 67

PL/SQL - Declaraciones Sección DECLARE <nombre> [CONSTANT] <tipo de dato> [NOT NULL] [:=<expresión>]; Ejemplo (ver ej1) DECLARE impuestos NUMBER; continua BOOLEAN; multiplicador CONSTANT NUMBER(3,2):=0.10; fecha DATE; sal_max NUMBER(11,2):=500*multiplicador; nombre CHAR(30) BEGIN 68

PL/SQL - Declaraciones Ejemplo DECLARE numero_dep dept.deptno%type; nuevo_balance NUMBER(8):=10; referencia nuevo_balance%type; reg_emp emp%rowtype; BEGIN SELECT * INTO reg_emp FROM emp WHERE...; IF reg_emp.deptno=20 THEN... END; 69

PL/SQL - Ámbito DECLARE a CHAR; b NUMBER; BEGIN --a CHAR y B DECLARE a NUMBER; c DATE; BEGIN --a NUMBER, b y c END; DECLARE d BOOLEAN; BEGIN --a CHAR, b y d END; END; 70

PL/SQL Asignación y Operadores Asignación := Operadores (mayor a menor precedencia) **,NOT +,- *,/ +,-, =,!=,<,>,<=,>= IS NULL, LIKE, IN, BETWEEN AND OR Exponenciación, negación Identidad, negación Multiplicación, división Suma, resta, concatenación Comparación Unión Inclusión 71

PL/SQL Estructuras de control Condicional Iterativo Secuencial 72

PL/SQL Control condicional IF THEN IF condición THEN conjunto de sentencias; END IF; IF THEN ELSE IF condición THEN conjunto de sentencias1; ELSE conjunto de sentencias2; END IF; IF THEN ELSIF IF condición1 THEN conjunto de sentencias1; ELSIF condición2 THEN conjunto de sentencias2; ELSE conjunto de sentencias3; END IF; 73

PL/SQL Control condicional Ejemplos IF x>y THEN alto:=x; END IF; IF cadena= pe THEN UPDATE tabla...; ELSE UPDATE tabla2...; END IF; IF contador<20 THEN cambia:=50; ELSIF contador>50 THEN cambia:=30; ELSE cambia:=20; END IF; 74

PL/SQL Control iterativo LOOP LOOP conjunto de sentencias; EXIT WHEN condición de salida conjunto de sentencias; END LOOP; 75

PL/SQL Control iterativo WHILE WHILE condición de permanencia LOOP conjunto de sentencias; END LOOP; 76

PL/SQL Control iterativo Bucle FOR numérico FOR variable IN [REVERSE] rango_mínimo..rango_máximo LOOP conjunto de sentencias; END LOOP 77

PL/SQL Control iterativo DECLARE i NUMBER(3):=1; BEGIN WHILE i<10 LOOP INSERT INTO tab VALUES(i); i:=i+1; END LOOP; LOOP INSERT INTO tab VALUES(i); i:=i+1; EXIT WHEN i>9; END LOOP; FOR i IN 1..9 LOOP INSERT INTO tab VALUES(i); END LOOP; END; 78

PL/SQL Control secuencial GOTO (no usar) NULL indica de forma explícita inacción. IF ratio>90 THEN calcula(dni); ELSE NULL; END IF; 79

PL/SQL - Transacciones COMMIT ROLLBACK SAVEPOINT punto de salvaguarda 80

PL/SQL - Transacciones Ejemplo BEGIN INSERT INTO tabla VALUES ( uno ); SAVEPOINT A; INSERT INTO tabla VALUES ( dos ); SAVEPOINT B; INSERT INTO tabla VALUES ( tres ); SAVEPOINT C;... IF x THEN ROLLBACK TO B; ELSIF y THEN ROLLBACK; ELSE ROLLBACK TO A; END IF; COMMIT; END; 81

PL/SQL - Cursores Declaración CURSOR nombre IS sentencia SELECT [cláusula FOR UPDATE OF ] ; Forma de uso (el más sencillo) FOR variable IN nombre_cursor LOOP conjunto de sentencias END LOOP; 82

PL/SQL - Cursores Ejemplo (ver ej2) DECLARE CURSOR c1 IS SELECT * FROM tpersona; BEGIN FOR i IN c1 LOOP IF i.dni= ffff THEN...; END LOOP; END; 83

PL/SQL - Excepciones Tipos Predefinidas Definidas por el usuario 84

PL/SQL - Excepciones Control de excepciones... EXCEPTION WHEN nombre_de_excepción THEN conjunto de sentencias; WHEN nombre_de_excepción THEN conjunto de sentencias;... WHEN OTHERS THEN conjunto de sentencias; END; 85

PL/SQL - Excepciones Excepciones predefinidas: DUP_VAL_ON_INDEX INVALID_CURSOR INVALID_NUMBER LOGON_DENIED NO_DATA_FOUND NOT_LOGGED_ON PROGRAM_ERROR STORAGE_ERROR TIMEOUT_ON_RESOURCE TOO_MANY_ROWS VALUE_ERROR ZERO_DIVIDE TRANSACTION_BACKED_OUT ROWTYPE_MISMATCH CURSOR_ALREADY_OPEN ACCES_INTO_NULL COLLECTION_IS_NULL SUBSCRIPT_OUTSIDE_LIMIT SUBSCRIPT_BEYOND_COUNT 86

PL/SQL - Excepciones Definidas por el usuario Sintaxis Nombre EXCEPTION; [PRAGMA EXCEPTION_INIT(nombre,-número);] Ejemplo DECLARE mi_error EXCEPTION; PRAGMA EXCEPTION_INIT(mi_error,-1999);... Invocación mediante RAISE RAISE mi_error; 87

PL/SQL - Excepciones Funciones usadas con excepciones: SQLCODE devuelve el código de error que ha ocurrido SQLERRM devuelve la cadena de texto correspondiente al error ocurrido 88

PL/SQL - Excepciones Ejemplo (ver ej3) DECLARE fatal EXCEPTION;... BEGIN... IF campo IS NULL THEN RAISE fatal;... EXCEPCTION WHEN fatal THEN... WHEN OTHERS THEN cod:=sqlcode; mensaje:=sqlerrm; INSERT INTO errores VALUES (cod,mensaje); COMMIT; END; 89

PL/SQL - Subprogramas Tipos Procedimientos (PROCEDURE) Funciones (FUNCTION) Invocación Desde otro subprograma Desde aplicaciones Desde SQL+ (EXECUTE) 90

PL/SQL - Procedimientos Sintaxis CREATE [OR REPLACE] PROCEDURE [esquema.]nombre [(argumento1 [{IN OUT IN OUT}] tipo_dato [{:= DEFAULT} valor],... argumenton [{IN OUT IN OUT}] tipo_dato [{:= DEFAULT} valor])] {IS AS} cuerpo de procedimiento 91

PL/SQL - Procedimientos Estructura CREATE OR REPLACE PROCEDURE nombre IS /*sección declarativa*/ BEGIN /*sección ejecutable*/ EXCEPTION /*sección de excepciones*/ END [nombre]; 92

PL/SQL - Procedimientos Ejemplo CREATE OR REPLACE PROCEDURE ejemplo (p_departamento NUMBER, p_emp temp.empno%type, p_accion NUMBER(1) DEFAULT 1) IS v_aux NUMBER; v_nuevo_dep tdept.deptno%type; BEGIN... EXCEPTION WHEN... END ejemplo; 93

PL/SQL - Funciones Sintaxis CREATE [OR REPLACE] FUNCTION [esquema.]nombre [(argumento1 [{IN OUT IN OUT}] tipo_dato [{:= DEFAULT} valor],... argumenton [{IN OUT IN OUT}] tipo_dato [{:= DEFAULT} valor])] RETURN tipo_dato_retorno {IS AS} cuerpo de función 94

PL/SQL - Funciones En el cuerpo de la función es necesario que se use la orden RETURN para devolver el valor de retorno de la función (También se puede usar en procedures sin ningún parámetro y sirve para provocar la salida inmediata del mismo) 95

PL/SQL - Funciones Ejemplo CREATE OR REPLACE FUNCTION calcula (p_dni tpersona%type, p_sal OUT NUMBER) RETURN NUMBER IS v_porcen NUMBER(3,2); BEGIN... IF v_porcen>0.25 THEN RETURN 1; ELSE RETURN 2; END calcula; 96

PL/SQL - Subprogramas Manejo de excepciones RAISE (para excepciones predefinidas o definidas por el usuario) RAISE_APPLICATION_ERROR (para crear excepciones con sus propios mensajes de error) RAISE_APPLICATION_ERROR(número,mensaje) El número debe estar entre 20000 y 20999 El mensaje puede ser de hasta 512 caracteres 97

PL/SQL - Subprogramas Privilegio EXECUTE Parámetro REMOTE_DEPENDENCIES_MODE SIGNATURE TIMESTAMP 98

PL/SQL - Paquetes Pueden incluir: Procedimientos Funciones Cursores Tipos Variables (permiten variables privadas y globales ) Excepciones 99

PL/SQL - Paquetes Constan de Especificación Cuerpo 100

PL/SQL - Paquetes Especificación CREATE [OR REPLACE] PACKAGE nombre {IS AS} especificación_procedimientos especificación_funciones declaración_variables definición_tipo declaración_excepciones declaración_cursores END [nombre]; 101

PL/SQL - Paquetes Cuerpo CREATE [OR REPLACE] PACKAGE BODY nombre {IS AS} código_procedimientos código_funciones [BEGIN código_inicialización_paquete] END [nombre]; 102

PL/SQL - Paquetes Permiten la sobrecarga de procedimientos y funciones Para referirnos a ellos: Esquema.paquete.objeto 103

PL/SQL - Disparadores Subprogramas que se ejecutan cuando ocurre un suceso de disparo (orden DML, INSERT, UPDATE o DELETE) sobre una tabla de la base de datos 104

PL/SQL Disparadores Un disparador puede ejecutarse BEFORE AFTER De una operación INSERT UPDATE DELETE 105

PL/SQL - Disparadores Sintaxis CREATE [OR REPLACE] TRIGGER esquema.nombre {BEFORE AFTER} {[OR]DELETE [OR] INSERT [OR] UPDATE [OF columna]} ON esquema.tabla [REFERENCING OLD [AS] antiguo NEW[AS] nuevo] NO SE USA [FOR EACH ROW] [WHEN condición] Bloque PL/SQL 106

PL/SQL - Disparadores :NEW :OLD UPDATING INSERTING DELETING 107

PL/SQL - Disparadores Orden de ejecución 1. BEFORE 2. BEFORE ROW 3. AFTER ROW 4.... 5. BEFORE ROW 6. AFTER ROW 7. AFTER 108

PL/SQL Disparadores Si hay dos disparadores con el mismo evento orden de ejecución aleatorio No se puede acceder a una tabla mutante (aquella que está siendo modificada, directamente o a través de ON DELETE CASCADE) No se puede modificar una tabla referenciada en las columnas implicadas en restricciones de integridad referencial que tiene que comprobar la sentencia que dispara el trigger. 109

PL/SQL Paquetes estándar DBMS_JOB DBMS_OUTPUT UTL_FILE 110