PL/SQL Francisco Moreno Universidad Nacional. Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula.

Slides:



Advertisements
Presentaciones similares
SQL Sigla del nombre “Structured Query Language”.
Advertisements

LENGUAJE ESTRUCTURADO DE CONSULTA “SQL”
BASE DE DATOS OBJETO RELACIONAL
Introducción a Transact-SQL
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Fernando Velasco
Funciones SQL en PL/SQL Semana 2. Aprendizajes esperados Construye procedimientos almacenados, triggers de base de datos, cursores y funciones que ayuden.
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP
Maestría en Bioinformática Bases de Datos y Sistemas de Información Otros objetos de Base de Datos Ing. Alfonso Vicente, PMP
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Unidad 3 Lenguaje SQL Contenidos Que es SQL ? Estructura de SQL
PL/SQL Francisco Moreno Universidad Nacional.
SQL SERVER APLICADO (SSA010) Ariel Alexis Fierro Sáez DuocUC.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
SESIÓN 2. Completados por el tipo de objeto sobre el que actúan y el objeto concreto: CREATE DATABASE mibase ; Permite crear una base de datos llamada.
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Subconsultas Avanzadas
Ing. Ricardo Carlos Inquilla Quispe
Procedimientos Almacenados Funciones Agregadas
Conversión cadena a número
UNITA - IBARRA TRIGGERS
John Freddy Duitama M.U.de.A. Facultad de Ingeniería. Creación del esquema de Una Base de Datos. John Freddy Duitama Muñoz. Facultad de Ingeniería. U.de.A.
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
PL/SQL Francisco Moreno Universidad Nacional.
Informática Ingeniería en Electrónica y Automática Industrial
PL/SQL Francisco Moreno Universidad Nacional.
SQL: DDL Francisco Moreno & Carlos Mario Zapata. SQL:DDL DDL: Lenguaje de Definición de Datos Permite crear objetos en la Base de Datos Tipos de Objetos:
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
Teoría – Alejandro Gonzalez
Triggers(Disparadores)
Estructuras de Control.
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 18/08/2006.
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
INSTRUCCIONES Elaboración de la Presentación:
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
LENGUAJE SQL.
SQL: DDL Francisco Moreno. SQL: DDL DDL: Lenguaje de Definición de Datos Permite crear objetos en la BD Tipos de objetos: - Tablas: corresponden a las.
Expresiones algebraicas equivalentes
PROCEDIMIENTOS ALMACENADOS Es una consulta almacenada en la base de datos en un servidor. Los P.A. Mejoran el Rendimiento Disminuyen el tráfico. Los P.A.
LENGUAJE ESTRUCTURADO DE CONSULTAS
SQL Sigla del nombre “Structured Query Language”.
“variables , sentencia if y bucles”
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
Estructuras de Control
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
SQL Lenguaje Estructurado de Consultas. Structured Query Lenguaje (SQL). Lenguaje de acceso a bases de datos. Proyecto de Investigación de IBM. La mayoria.
Después de completar esta lección, debe ser capaz de:  Crear registro definidos por el usuario.  Crear un registro con el atributo %ROWTYPE.  Crear.
5 Paquetes ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Base de Datos I – Ing. Mary Carlota Bernal J. BASE DE DATOS I PL/SQL.
SQL: DDL.
6 Triggers ORACLE - II Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega.
Mtr. Adrián Monge Monge Educación 2015 Maestría, Mención en Administración de Proyectos ULACITMaestría, Mención en Administración de Proyectos 2012 Licenciatura,
Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos.
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
6 Triggers ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
Crear una tabla (create table - sp_tables - sp_columns - drop table) Para ver las tablas existentes creadas por los usuarios en una base de datos usamos.
PL/SQL Francisco Moreno Universidad Nacional.
Transcripción de la presentación:

PL/SQL Francisco Moreno Universidad Nacional

Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula CASE WHEN*) e iterativos (implícitos) en ocasiones se requiere: - Manipular y controlar los datos de una manera secuencial - Mejorar el desempeño de las aplicaciones Existen problemas cuya solución puede ser más “sencilla” y eficiente mediante un lenguaje procedimental que mediante SQL “puro” * PL/SQL también la tiene. Más adelante se ve un ejemplo.

Introducción al PL/SQL Ejemplo: inserción de 500 filas en una tabla: DROP TABLE plana; CREATE TABLE plana(nro NUMBER(3) PRIMARY KEY, dato VARCHAR2(80)); BEGIN FOR i IN LOOP INSERT INTO plana VALUES (i,'No rayar el pupitre'); END LOOP; END; /

secuencia, decisión, iteraciónIncorporación de PSM* a SQL (1992)  Incluye estructuras de secuencia, decisión, iteración, creación de procedimientos, funciones, etc. La versión PSM de Oracle se llama PL/SQL (Procedural Language/SQL). En SQL Server se llama Transact-SQL (T-SQL). procedimientos funciones, disparadores paquetesEn PL/SQL se pueden crear procedimientos con o sin nombre (anónimos), funciones, disparadores (triggers) y bibliotecas de funciones y procedimientos llamadas paquetes. * Persistent Stored Modules Introducción al PL/SQL

Un bloque PL/SQL es una pieza de código dividida en tres secciones: DECLARE Sección de declaración BEGIN Sección ejecutable EXCEPTION Sección de manejo de excepciones END; Las secciones de manejo de excepciones y de declaración son opcionales. Los bloques pueden contener otros bloques (sub-bloques)  ver luego Los comentarios van entre /* */. Si no ocupan más de una línea, se pueden escribir después de -- (dos guiones). Bloques PL/SQL

Variables y constantes Tipos de datos* en PL/SQL: NUMBER, CHAR, VARCHAR/VARCHAR2, DATE, BOOLEAN, entre otros. La sintaxis para declarar variables o constantes es: nombre [CONSTANT] TIPO [NOT NULL][:= expresión]; No se diferencian mayúsculas y minúsculas. * Algunos tienen precisión. Los corchetes indican las partes opcionales

Se pueden declarar variables refiriéndose al tipo de datos de otros elementos tales como variables, columnas y tablas, ver ejemplos más adelante. El operador de asignación es := y el de igualdad es =.

Alcance El alcance o visibilidad de las variables sigue estas reglas: 1. Una variable es visible en el bloque en el cual se declara y en todos sus sub-bloques, a menos que se aplique la regla Si se declara una variable en un sub-bloque con el mismo nombre que una variable del bloque contenedor, la variable del sub-bloque es la que tiene prioridad en el sub-bloque*. * Es posible acceder en el sub-bloque a la variable del bloque contenedor mediante etiquetas (luego se ejemplifican), pero lo más sencillo es usar nombres diferentes para las variables.

Alcance DECLARE a a NUMBER(2) := 10; BEGIN a DBMS_OUTPUT.PUT_LINE('Valor de a externa '|| a); DECLARE a NUMBER(3) := 20; BEGIN DBMS_OUTPUT.PUT_LINE('Valor de a interna '|| a); END; a DBMS_OUTPUT.PUT_LINE('Valor de a '|| a); END; / Imprime: Valor de a externa 10 Valor de a interna 20 Valor de a 10 Nota: Para ver los resultados de la impresión en SQL*Plus se debe ejecutar: SQL> SET SERVEROUTPUT ON Sub- bloque Operador de concatenación || Para ejecutar en SQL*Plus

En PL/SQL se puede usar directamente el sublenguaje de manipulación de datos DML de SQL, es decir, INSERT, DELETE, UPDATE, SELECT (el SELECT requiere usar INTO o estar asociado con un cursor, ver luego). Para usar sentencias DDL en PL/SQL, es decir, CREATE, DROP, ALTER se requiere algo adicional:

BEGIN EXECUTE IMMEDIATE 'CREATE TABLE t(ced NUMBER(8))'; END; / La sentencia DDL NO lleva punto y coma dentro de las comillas simples. Lo que sigue a IMMEDIATE puede ser una variable de caracteres  Luego se verán más ejemplos

Usar EXECUTE IMMEDIATE solo cuando sea indispensable, lo siguiente es innecesario, aunque funciona: BEGIN EXECUTE IMMEDIATE 'INSERT INTO t VALUES(97)'; END; / Es más simple: BEGIN INSERT INTO t VALUES(97); END; /

En PL/SQL, las funciones numéricas (SQRT, ROUND, POWER etc.), de caracteres (LENGTH, UPPER, INITCAP, etc.), de fechas (ADD_MONTHS, MONTHS_BETWEEN); se pueden usar por fuera de una sentencia SQL pero las funciones de grupo (COUNT, SUM, AVG, MAX, entre otras) solo se pueden usar dentro de una sentencia SQL.

Ejemplo DROP TABLE emp; CREATE TABLE emp( cod NUMBER(8) PRIMARY KEY, nom VARCHAR2(20) NOT NULL, fecha_ing DATE, sueldo NUMBER(8) CHECK(sueldo > 0) );

DECLARE nom emp.nom%TYPE := INITCAP('adam'); fi emp.fecha_ing%TYPE; BEGIN fi := ADD_MONTHS(SYSDATE,-14); INSERT INTO emp VALUES (4329, nom, fi, ); END; / Las vbles. se pueden inicializar en el DECLARE o en el BEGIN Acá se pueden colocar los valores directamente y prescindir de las vbles.

Sobre las consultas SQL en PL/SQL: Se debe proporcionar un “lugar” para guardar los datos devueltos por una consulta (SELECT) Esto se puede lograr mediante la cláusula SELECT … INTO. Sin embargo, un SELECT... INTO debe retornar una y solo una fila: –Si la consulta no recupera filas o recupera múltiples filas, ocurre un error (excepción, se verán luego). –Los cursores (se ven luego) sirven para consultas que recuperan 0, 1 o múltiples filas.

Ejemplo de un borrado desde PL/SQL. DECLARE limite emp.sueldo%TYPE := 8000; cuantos NUMBER(8); BEGIN SELECT COUNT(*) INTO cuantos FROM emp; DBMS_OUTPUT.PUT_LINE(cuantos); DELETE FROM emp WHERE sueldo > limite; SELECT COUNT(*) INTO cuantos FROM emp; DBMS_OUTPUT.PUT_LINE(cuantos); END; / ¿Qué pasaría si limite fuese un atributo de la tabla emp?

Volver a insertar el empleado anterior Ahora ejecutar: DECLARE nom emp.nom%TYPE; sue emp.sueldo%TYPE; BEGIN SELECT nom, sueldo INTO nom, sue FROM emp WHERE cod = 4329; /*Aquí se manipulan los datos recuperados, por ejemplo, imprimirlos:*/ DBMS_OUTPUT.PUT_LINE('El empleado ' || nom || ' tiene sueldo ' || sue); END; / Luego se verá como enviar parámetros

Control de Flujo Las comparaciones lógicas son la base del control condicional en PL/SQL. Los resultados de las comparaciones son verdadero (TRUE), falso (FALSE) o nulo (NULL). Cualquier “cosa” comparada con NULL retorna NULL (desconocido). Los operadores lógicos son : >, =, <>

La sentencia IF tiene la sintaxis: IF condición THEN secuencia de instrucciones [ELSIF condición THEN secuencia de instrucciones] --Los ELSIF se pueden repetir [ELSE secuencia de instrucciones] END IF;

Comparación con nulo: ¿Qué imprime el siguiente programa?: DECLARE a NUMBER := NULL; BEGIN IF a = a THEN DBMS_OUTPUT.PUT_LINE('O sea que NULL = NULL'); ELSIF a <> a THEN DBMS_OUTPUT.PUT_LINE('O sea que NULL <> NULL'); ELSE DBMS_OUTPUT.PUT_LINE('Indefinido, NULL no es ni = ni <> a NULL'); END IF; END; /

Lo anterior también se puede escribir con CASE así: DECLARE a NUMBER := NULL; BEGIN CASE WHEN a = a THEN DBMS_OUTPUT.PUT_LINE('O sea que NULL = NULL'); WHEN a <> a THEN DBMS_OUTPUT.PUT_LINE('O sea que NULL <> NULL'); ELSE DBMS_OUTPUT.PUT_LINE('Indefinido, NULL no es ni = ni <> a NULL'); END CASE; END; /

Ciclos o iteraciones a) Ciclo simple sin límite: LOOP LOOP secuencia de instrucciones END LOOP; Para salir del ciclo se usa: EXIT [WHEN condición];

Ejemplo. DECLARE cont NUMBER(4) := 0; BEGIN DELETE plana; LOOP INSERT INTO plana VALUES(cont, CEIL(DBMS_RANDOM.VALUE(1,100000))); cont := cont + 1; EXIT WHEN cont = 1000; END LOOP; END; /

b) Ciclo para: FOR Permite repetir una secuencia de instrucciones un número fijo de veces. Su sintaxis es: FOR índice IN [REVERSE] entero.. entero LOOP secuencia de instrucciones END LOOP; Notas: - El incremento del FOR siempre es 1. - Aunque el ciclo se haga “en reversa” los límites siempre se colocan de menor a mayor. Veamos un ejemplo:

Ejemplo: BEGIN DELETE plana; REVERSE FOR i IN REVERSE LOOP INSERT INTO plana VALUES (i, 'No rayar el pupitre'); END LOOP; END; /

c) Ciclo mientras que: WHILE WHILE repetirá una secuencia de instrucciones hasta que la condición controladora del ciclo deje de ser cierta. Su sintaxis es: WHILE condición LOOP secuencia de instrucciones END LOOP;

Ejemplo: DECLARE cont NUMBER(3) := 500; BEGIN DELETE PLANA; WHILE cont > 0 LOOP INSERT INTO plana VALUES (cont, DBMS_RANDOM.STRING('u',60) || cont); cont := cont - 1; END LOOP; END; / u: mayúsculas l: minúsculas a: combinacíon de mayúsculas y minúsculas x: alfanuméricos Tamaño

Instrucción CONTINUE CONTINUE pasa el control inmediatamente a la siguiente iteración de un ciclo. Solo se puede usar en ciclos.

DECLARE i NUMBER := 0; BEGIN LOOP i := i + 1; IF i BETWEEN 5 AND 15 THEN CONTINUE; END IF; DBMS_OUTPUT.PUT_LINE(i); EXIT WHEN i = 20; END LOOP; END; / Continue