Introducción al lenguaje PLSQL

download Introducción al lenguaje PLSQL

of 58

Transcript of Introducción al lenguaje PLSQL

Introduccin al lenguaje PL/SQLJoaqun Gutirrez GilSegundo Ingeniera Tcnica en Informtica de Gestin (UPO) Asignatura: Bases de Datos

Introduccin al lenguaje PL/SQL Asignatura: Bases de Datos

NDICE Introduccin...........................3 Bloques PL/SQL4

Uso de sentencias SQL dentro de PL/SQL....5 Unidades lxicas.6 Tipo en PL/SQL...7 Literales9 Definicin de variables en PL/SQL.9 Conversin de tipos.11 Visibilidad de las variables.12 Entrada y salida de datos.12 Estructuras de control...14 Funciones SQL predefinidas18 Cursores en PL/SQL..20 Bucles de extraccin mediante cursores..25 Excepciones en PL/SQL..27 Subprogramas en PL/SQL.35 Subprogramas en bloques annimos42 Paquetes en PL/SQL..43 Registros en PL/SQL..47 Definicin de VARRAYS...49 BULK COLLECT...51 Transacciones en PL/SQL.52 Transacciones autnomas..53 PL/SQL y JAVA..54 Bibliografa.57 Licencia.58

Pgina 2

Introduccin al lenguaje PL/SQL Asignatura: Bases de Datos

IntroduccinSQL es un lenguaje de consulta para las bases de datos relacionales, pero que no posee la potencia de los lenguajes de programacin. Para esto existe PL/SQL, para combinar la capacidad de consulta de SQL con la potencia de los lenguajes de programacin y as poder realizar aplicaciones completas para el manejo de bases de datos relacionales. PL/SQL es un lenguaje procedimental diseado por Oracle para trabajar con la base de datos. Soporta todos los comandos de consulta y manipulacin de datos, aportando al lenguaje SQL las estructuras de control y otros elementos propios de los lenguajes procedimentales de tercera generacin. La unidad mnima de trabajo es el bloque, es un lenguaje estructurado en bloques. Es un lenguaje embebido en ORACLE y PostgreSQL. PL/SQL ampla la funcionalidad de SQL aadiendo estructuras habituales en otros lenguajes de programacin como: Variables y tipos (predefinidos y definidos por el usuario). Estructuras de control (bucles y condiciones IF-THEN-ELSE). Procedimientos y funciones. Tipos de objetos y mtodos.

Adems de ser procedimental, este lenguaje es modulable, es decir, es posible encapsular el cdigo para su reutilizacin posterior. De esa forma eliminamos la posibilidad de que exista cdigo redundante, se mejora la eficiencia de las aplicaciones, la seguridad, etc. Los mdulos de PL/SQL estn divididos en cuatro categoras: Procedimientos, Funciones, Paquetes y Triggers. Procedimientos: cdigo encapsulado que acepta parmetros de entrada y que no devuelve ningn tipo de valor. Funciones: cdigo encapsulado que acepta parmetros de entrada y que devuelve un valor. Paquete: conjunto de procedimientos y funciones. Tiene dos partes: la especificacin, con la cabecera de las funciones, procedimientos y la declaracin de variables, y el cuerpo, con el cdigo de estos mdulos. Es una forma de aglutinar mdulos relacionados entre si. Se utiliza como una biblioteca. Triggers: cdigo PL/SQL asociado a una tabla que se activa siempre que se d un determinado evento (insert, update, delete). Se utilizan para implementar restricciones complejas en las tablas.

Pgina 3

Introduccin al lenguaje PL/SQL Asignatura: Bases de Datos

Todos estos mdulos, una vez creados, se compilarn en la Base de Datos transformndose en objetos propios de dicha Base de Datos. De tal forma que pueden ser utilizados por cualquier usuario u otro cdigo, siempre que se tenga permiso para ello.

Bloques PL/SQLComo ya se ha mencionado, la unidad bsica en PL/SQL es el bloque. Todos los programas PL/SQL estn compuestos por bloques que puedes estar anidado. Un bloque PL/SQL est compuesto de tres partes principales: Seccin declarativa (opcional). Seccin ejecutable (opcional). Seccin de excepciones (opcional).

Estructura de un bloque: A continuacin se presenta cual es la estructura de un bloque PL/SQL.

Podemos crear tres tipos de bloques diferentes: Bloques annimos: Se construyen de forma dinmica y se suelen ejecutar una sola vez. Bloques nominados: Igual que los annimos pero con una etiqueta que les da nombre. Subprogramas: Procedimientos, paquetes y funciones, almacenados de la Base de Datos y que se ejecutan en mltiples ocasiones. Los subprogramas se ejecutarn mediante una llamada. Disparadores (Triggers): Bloques nominados que se almacenan en la Base de Datos y se ejecutan ante algn suceso.

Pgina 4

Introduccin al lenguaje PL/SQL Asignatura: Bases de Datos

Estas estructuras se pueden anidar dando lugar a bloques ms complejos.

Algunos apuntes ms: Para dar nombre a un bloque se le pone una etiqueta antes del DECLARE. Por ejemplo: . Para transformar un bloque en un procedimiento almacenado reemplazamos la palabra clave DECLARE por CREATE OR REPLACE PROCEDURE nombre_procedimiento AS. Todas las sentencias PL/SQL deben acabar en punto y coma.

Existen dos tipos de comentarios en PL/SQL:

Uso de sentencias SQL dentro del lenguaje PL/SQLPL/SQL posibilita la utilizacin de consultas SQL dentro del cdigo. Las nicas instrucciones SQL permitidas en un programa PL/SQL son las del lenguaje de manipulacin de datos y las de control de transacciones, es decir: DML: SELECT, INSERT, UPDATE, DELETE. Control de transacciones: COMMIT, ROLLBACK, SAVEPOINT.

Aunque existe una tcnica que permite la utilizacin de SQL dinmico, es decir, del lenguaje de definicin de datos. El SQL dinmico permite crear dinmicamente instrucciones SQL en tiempo de ejecucin para despus analizarlas y ejecutarlas. En cuanto a las instrucciones DML, la nica dificultad o diferencia la encontramos en la sentencia SELECT, ya que es necesario utilizar la clusula INTO para volcar el resultado de la consulta sobre una o varias variables. Adems, estas sentencias SELECTINTO tienen la restriccin de que han de devolver nicamente un solo registro. Si devolviera ms de una fila, PL/SQL devolvera el siguiente mensaje de error:

Pgina 5

Introduccin al lenguaje PL/SQL Asignatura: Bases de Datos

ORA-1427: Single-row query returns more than a row Veamos un ejemplo de sentencia SELECT-INTO:

En una clusula WHERE, podemos utilizar tanto literales como variables declaradas dentro de un bloque PL/SQL. Pero para ello hay que cumplir dos restricciones: a) La variable ha de ser del tipo adecuado: en un WHERE no podemos igualar una variable NUMBER con un campo de tipo DATE. b) La variable nunca puede tener el nombre de un atributo de tabla. Por qu motivo? Veamos un ejemplo:

La intencin de este bloque annimo es borrar todos los registros de la tabla CLASSE que pertenezcan al departamento CS. Cuando PL/SQL examina una expresin de tipo EXPR1 = EXPR2, lo primero que hace es comprobar si alguna de esas expresiones se corresponden con columnas de la tabla con la que se est operando. Como en PL/SQL no se diferencia entre maysculas y minsculas, department y Department son asociadas a la columna de la tabla CLASSES. El efecto es que se borrarn todos los registros de las tablas.

Unidades lxicasLos identificadores se emplean para dar nombre a objetos PL/SQL, como por ejemplo, variables, literales, cursores, tipos y subprogramas. Los identificadores constan de una letra, seguida por una secuencia opcional de caracteres entre los cuales encontramos

Pgina 6

Introduccin al lenguaje PL/SQL Asignatura: Bases de Datos

letras, nmeros, signos de dlar ($), caracteres de subrayado (_) y almohadillas (#). Los dems caracteres estn prohibidos y la longitud mxima es de 30 caracteres. En PL/SQL no se distingue entre mayscula y minscula. Si alguna vez necesitamos utilizar un identificador que incumpla las reglas anteriores o sea igual a una palabra reservada (BEGIN, END, EXCEPTION, etc) podemos encerrar dicho identificador entre dobles comillas. Los delimitadores son smbolos que tienen un significado especial y que sirven para separar unos identificadores de otros. A continuacin se muestran los ms relevantes:

Tipo en PL/SQLA continuacin se muestran los tipos disponibles en el gestor de ORACLE. NUMBER (size, precisin): puede contener un valor numrico entero o de punto flotante. Es igual al tipo NUMBER de la base de datos. BINARY_INTEGER: los literales de tipo NUMBER son almacenados en formato decimal por cuestiones de optimizacin. Por ello no se utilizan directamente en las operaciones aritmticas. ORACLE los convierte durante y al final del proceso. El tipo BINARY_INTEGER est formado por nmero enteros con signo. Del -2.147.483.647 al 2.147.483.647 y se utilizan para valores que solo intervengan en clculos y no sean almacenados en la Base de Datos. PLS_INTEGER: igual que el tipo anterior pero gestionando ms eficientemente. Se recomienda utilizar este tipo siempre que se pueda. CHAR (s): las variables de este tipo con cadenas de caracteres de longitud fija. VARCHAR2(s): pueden contener cadenas de caracteres de longitus variable, con una longitud mxima especificada. DATE: se comporta de la misma forma que el tipo equivalente de la Base de Datos.

Pgina 7

Introduccin al lenguaje PL/SQL Asignatura: Bases de Datos

LONG: a diferencia de tipo LONG de la BD, que puede contener hasta dos gigabytes de datos, el tipo LONG de PL/SQL es una cadena de longitud variable con una longitud mxima de 32.760 bytes. Son variables muy similares a las de tipo VARCHAR2. RAW: se emplea para almacenar datos binarios de longitud fija. Es parecido al CHAR pero sin sufrir conversiones entre conjuntos de caracteres al ser transmitidos entre dos BD diferentes. LONG RAW: son similares a los datos LONG, excepto por el hecho de que PL/SQL no realizar conversiones entre conjuntos de caracteres. BOOLEAN: las variables BOOLEANAS pueden tomar el valor TRUE, FALSE o NULL. Se pueden combinar mediante operadores lgicos (NOT, AND, OR). Las Expresiones lgicas devuelven valores BOOLEANOS utilizando operadores relaciones (