Diseño de bases de datos

Documentos relacionados
Introducción a PL/SQL

Diseño de bases de datos

Introducción a PL/SQL

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

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

PL/SQL avanzado: Secuencias, triggers, cursores y subprogramas

INTRODUCCIÓN A PL/SQL

Introducción a Oracle PL / SQL 12c

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

Oracle PL/SQL. Programa de Estudio.

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

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

Triggers 24/12/2016. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Oracle Database 12c SQL and PLSQL Fundamentals

Triggers. BASES DE DATOS Mercedes García Merayo

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

Tipos de datos en SQL. SQL. DDL (Data Definition Language) CREATE DOMAIN CREATE TABLE CREATE TABLE. CREATE TABLE con restricciones de atributo

Introducción a SQL (DDL)

Unidad 6. Procedimientos Almacenados y Disparadores

A. Introducción. B. Los DATABASES TRIGGERS. PL/SQL en objetos de la base de datos. Oracle 11g - SQL, PL/SQL, SQL*Plus 271

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

Lenguaje PL/SQL. Instrucciones de Repetición

Triggers (o disparadores) Definición y sintaxis

Funciones, procedimientos y cursores en Oracle

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

Para procesar instrucciones SELECT que devuelvan más de una fila, son necesarios cursores explicitos combinados con un estructura de bloque.

GBD Diseño físico de DDBB

Diseño de bases de datos

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

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

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

Departamento de Lenguajes y Sistemas Informáticos

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

TIPOS COMPUESTOS. Pueden contener varios valores, a diferencia de los tipos escalares. Existen dos tipos:

Manual de desarrollo en PL/SQL

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

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

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

ÍNDICE INTRODUCCIÓN...13

SQL Sintaxis. Ejemplo de Alumno, Curso, Profesor. Esquemas de Alumno, Curso, Profesor. Andrés Moreno S.

Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:

Examen de Ficheros y bases de datos Convocatoria de junio II PARCIAL

Tablas -SQL Curso Bases de Datos. Por Elizabeth León Guzmán, Ph.D. Profesora Ingeniería de Sistemas Grupo de Investigación MIDAS

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

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

Administración de sistemas gestores de bases de datos

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

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

Bases de Datos 2: Procedimientos Almacenados, Funciones y Triggers. Tecnólogo en Informática, sede Paysandú Bases de Datos 2

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

Introducción al lenguaje PL/SQL

Tema 5. Lenguaje de Definición de Datos

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

Fundamentos de Programación

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

Tema: DISPARADORES (TRIGGERS)

SQL Sintaxis. OpenOffice. Ejemplo de Alumno, Curso, Profesor. Ejemplo de Alumno, Curso, Profesor. Andrés Moreno S. Nombre. Apellido. RutAlumno.

Tema II: El modelo relacional de datos. (2.7) Automatización

Checks, Triggers y Excepciones en InterBase: validando desde la base de datos

ORACLE 11g &12c Developer PLSQL

Oracle Database: Conceptos Básicos de SQL y PL/SQL

Tema 1. Bases de datos activas

Sistemas de Bases de Datos II ITS / ITSB EMT CETP

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

GUÍA DE TRABAJO N 5 GRADO 11 Programación y Diseño de Articulación SENA Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6

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

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

Desarrollo de Aplicaciones Informáticas

GUÍA DE TRABAJO N 7 GRADO 11. Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6 GUIA N 7 COMANDOS MYSQL II. CREAR UNA TABLA

Tipos de Datos Compuestos. Copyright Oracle Corporation, All rights reserved.

(LDD) VARCHAR2 (n) : alfanumérico (hasta 240) NUMBER (n,p) : números con signo y punto decimal

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

- 1 - Mg. Abril Saire Peralta

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

Guía práctica SQL. (c) Francisco Charte Ojeda

Administración Base de Datos SQL

Práctica 3: Lenguaje SQL 2ª Parte: Definición de datos. Objetivos

Unidad III. Bases de Datos

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

Oracle Database: Programación con PL/SQL

5.1 Procedimientos y Funciones Almacenados. 5.2 Disparadores (Triggers).

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Manual de Sentencias Básicas en SQL

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

Transcripción:

Departamento de Lenguajes y Sistemas Informáticos E.T.S. Ingeniería Informática. Universidad de Sevilla Avda Reina Mercedes sn. 41012 Sevilla TlfFax 954 557 139 E-mail lsi@lsi.us.es Web www.lsi.us.es Diseño de Bases de Datos e.t.s. ingeniería informática Diseño de bases de datos Anexo B Sevilla, febrero 2007 V 2007.02.1

Indice 1 INTRODUCCIÓN... 3 1.1 DISEÑO Y RENDIMIENTO.... 3 2 ESTRUCTURA DEL LENGUAJE.... 3 2.1 USO DE VARIABLES.... 4 2.1.1 Declaración de variables...4 2.1.2 Tipos de variables...4 2.1.3 La propiedad %TYPE...5 2.1.4 La propiedad %ROWTYPE....5 2.2 ESTRUCTURAS DE CONTROL.... 6 2.2.1 Control Condicional:...6 2.2.2 Control Iterativo:...6 EJERCICIO 1.... 7 EJERCICIO 2... 7 EJERCICIO 3... 8 EJERCICIO 4... 8 EJERCICIO 5... 8 EJERCICIO 6... 8 Pág. 2 de 8

1 Introducción. es un lenguaje procedural propietario de Oracle. Combina: la potencia de definición y manipulación de datos de SQL la potencia de procesamiento de los lenguajes procedurales. Tiene estructuras de bloques; las unidades básicas de un programa son bloques lógicos. [ * comienza parte de declaraciones *...Declaraciones de objetos] * comienza parte ejecutable *...Comandos y Sentencias SQL y [EXCEPTION * comienza parte de tratamiento excepciones *...Tratamiento de excepciones] Un bloque puede ser un bloque anónimo, un procedimiento o una función. La estrategia de diseño es la modularidad; reducir la complejidad del problema dividiendo el problema en problemas más simples y fáciles de implementar (definición de procedimientos y funciones almacenados) 1.1 Diseño y rendimiento. Diseñando las aplicaciones en base a una librería de subprogramas almacenados, podemos eliminar el Código Redundante e incrementar la Productividad. Así mismo, se reduce la probabilidad de que existan errores en el código aumentando la Integridad y Consistencia de las aplicaciones. Al crear un procedimiento, función ó package, Oracle automáticamente lo compila y el código objeto lo carga en una área de memoria compartida de la SGA. Así mismo, cuando se dispara un trigger y el código objeto no está en la SGA, Oracle lo compila y carga el código objeto en la SGA. Si varios usuarios invocan un procedimiento ó función que está cargado en la SGA ó disparan un trigger, no son necesarios accesos a disco ni hay que cargar el código objeto en un área de la SGA distinta para cada usuario. Por tanto, mejora en Funcionamiento y Concurrencia de las aplicaciones y los Requerimientos de Memoria son menores. 2 Estructura del lenguaje. Contiene las siguientes estructuras: Control condicional : (IF.. ). Control iterativo: (Bucles FOR, WHILE, LOOP) Anidamiento de bloques. Control robusto de errores. Excepciones Variables y constantes. Funciones Pág. 3 de 8

incorpora las sentencias DML (INSERT, UPDATE, DELETE) y las sentencias SELECT de SQL. permite obtener variables y constantes basadas en el tipo de dato actual de columnas de la base de datos, o referenciar estructuras completas de filas de una tabla. 2.1 Uso de variables. Las variables se declaran y se pueden inicializar en la sección declarativa de un bloque. Permiten pasar valores a un subprograma mediante parámetros. Existen tres formas: IN El valor viene del proceso de llamada (es un dato de entrada y su valor no se cambia). Es el valor por defecto. OUT En una salida de programa sin error, el valor del argumento es devuelto al proceso de llamada. IN OUT Es una variable de entradasalida. 2.1.1 Declaración de variables. La sintaxis para la declaración de variables es: Nombre_variable [CONSTANT] tipo_de_dato [NOT NULL] [ := DEFAULT expresión] CONSTANT Declara la variable como constante. Su valor no puede cambiar. Debe ser inicializada. Departamento VARCHAR2(10) NOT NULL := C1 ; Valor CONSTANT NUMBER(2) := 12; Fecha_nac DATE; Fecha_contrato DATE DEFAULT SYSDATE; 2.1.2 Tipos de variables. Los tipos de datos de las variables son: Escalar, Compuesto y LOB Existen otras variables que no son y podemos clasificar en: variables BIND y variables HOST. Variables tipo escalar. BINARY-INTEGER Almacena enteros con signo.subtipos:natural, POSITIVO NUMBER [(precisión, escala)]. Almacena números con punto fijo o flotante CHAR [(longitud máxima)]. Almacena cadenas de caracteres de longitud fija. VARCHAR2 (longitud máxima). Almacena cadenas de caracteres de longitud variable. LONG Almacena cadenas de caracteres de longitud variable. RAW. Almacena datos binarios. LONG RAW. Almacena datos binarios. BOOLEAN. Almacena TRUE, FALSE o NULL. DATE. Almacena valores de fecha. ROWID. Dirección física de una fila de la BD Tipo compuesto. Los tipos compuestos son las tablas y registros definidos por el usuario, tablas anidadas y varrays. Variables HOST. Son variables que se declaran por ej. en SQL*Plus y se utilizan en bloques. Para utilizarlas en tienen que llevar como prefijo dos puntos (:). Pág. 4 de 8

2.1.3 La propiedad %TYPE. Declara una variable basada en: El tipo de dato de otra variable declarada previamente. El tipo de dato de una columna de una tabla. Cuando se declara una variable para contener los valores de una columna de una tabla, es necesario asegurar que la variable es del mismo tipo y precisión que los datos que va a contener. De no ser así se producirá un error de ejecución. Para utilizar el atributo %TYPE en lugar de un tipo de dato en la declaración de la variable, se añade %TYPE al nombre de la columna o al nombre de la variable previamente declarada. Sintaxis: <nom_variable propietario.tabla.columna%type>; <nombre_variable variable_%type> ; Ejemplos: w_departamento dept.dept_no%type ; total NUMBER(6) := 1000 ; total_mensual total%type ; Reduce el mantenimiento de programas. 2.1.4 La propiedad %ROWTYPE. Declara una variable registro, que representa una fila en una tabla o vista. Las columnas de la fila, y los nombres de los campos de la variable registro, tienen los mismos nombres y tipos de datos. Sintaxis: <nombre_variable_registro propietario.tabla%rowtype> ; Ej.: EMP_REC EMP%ROWTYPE ;.. SELECT * INTO EMP_REC FROM EMP.. END ; Para hacer referencia a un campo: Ej.: EMP_REC.ename := José ; nombre_variable_registro.nombre_columna Es más útil utilizar %ROWTYPE que una variable tipo registro definido por el usuario ya que de está forma no es necesario conocer el número y tipo de datos de la tabla subyacente y evita hacer modificaciones cuando la estructura de la tabla cambie. Pág. 5 de 8

2.2 Estructuras de control. 2.2.1 Control Condicional: IF THEN ; IF THEN ELSE; IF THEN ELSIF IF tipo_transacción = A THEN UPDATE cuentas SET.. ; ELSE UPDATE.. SET.. ; ENDIF; 2.2.2 Control Iterativo: Repite un número de veces un conjunto de sentencias Estructura repetitiva básica. LOOP <sentencias> EXIT WHEN <condición de salida> <sentencias> END LOOP LOOP INSERT INTO EMP (nombre, salario) VALUES (nombre_emp(i), salario_emp(i)); i := i+1; EXIT WHEN i > 3; Esquema WHILE WHILE <condición de permanencia> LOOP <sentencias> END LOOP Bucle FOR numérico con indicación de rango FOR <variable> IN [REVERSE] <r_mín.><r_máx> LOOP <sentencias> Bucle WHILE WHILE i < 4 LOOP INSERT INTO EMP (nombre, salario) VALUES (nombre_emp(i), salario_emp(i)); i := i+1; FOR i IN 1..3 LOOP INSERT INTO EMP (nombre, salario) VALUES (nombre_emp(i), salario_emp(i); i := i+1; Pág. 6 de 8

Ejercicio 1. Crear un bloque que muestre el máximo número de departamento. VARIABLE g_dep_max NUMBER dep_max NUMBER; SELECT max(deptno) INTO dep_max FROM dept; :g_dep_max := dep_max; PRINT g_dep_max Solución b) SET SERVEROUTPUT ON dep_max NUMBER; SELECT max(deptno) INTO dep_max FROM dept; dbms_output.put_line(to_char (dep_max)); Ejercicio 2. Crear un bloque que borre los empleados del departamento 10. Mostrar el número total de registros borrados. SET VERIFY OFF VARIABLE g_resulta VARCHAR2(40) resulta VARCHAR2(40); DELETE FROM emp WHERE deptno = 10; resulta := SQL%ROWCOUNT; :g_resulta := (TO_CHAR(resulta) 'filas borradas.'); COMMIT; SET VERIFY ON PRINT g_resulta Solución b) SET VERIFY OFF SET SERVEROUTPUT ON resulta VARCHAR2(40); DELETE FROM emp WHERE deptno = 10; resulta := SQL%ROWCOUNT; dbms_output.put_line(to_char(resulta) 'f. borradas'); COMMIT; Pág. 7 de 8

Ejercicio 3. Añadir un campo llamado estrellas VARCHAR2(100) a la tabla de empleados. ALTER TABLE emp ADD estrellas VARCHAR2(100) Para el empleado número 1 (empno = 1) añadir al campo estrellas un asterisco por cada 100 $ de su salario. SET VERIFY OFF v_empno emp1.empno%type; v_asteri emp1.estrellas%type := NULL; v_sal emp1.sal%type; COMMIT; SET VERIFY ON SELECT NVL(ROUND(sal100), 0) INTO v_sal FROM emp1 WHERE empno = 1; FOR i IN 1..v_sal LOOP v_asteri := v_asteri '*'; UPDATE emp1 SET estrellas = v_asteri WHERE empno = 1; Ejercicio 4. Crear una tabla (tabla1) con una sola columna (valor). Insertar registros en la tabla mediante un contador que se va incrementando y toma valores desde 1 hasta 10. V_contador INTEGER :=1; LOOP INSERT INTO tabla1 (Valor) VALUES (V_contador); V_contador :=V_contador +1; EXIT WHEN V_contador =10; Ejercicio 5. Modificar el ejercicio anterior utilizando un BUCLE WHILE. Ejercicio 6. Modificar el ejercicio anterior utilizando un BUCLE FOR. Pág. 8 de 8