Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PL/SQL Introduccin
Teora y prctica.
PL/SQL
SQL es un lenguaje de consulta para los sistemas de bases de datos relacionales, pero que no posee la potencia de los lenguajes de programacin. Cuando se desea realizar una aplicacin completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programacin tradicionales. PL/SQL es el lenguaje de programacin que proporciona Oracle para extender el SQL estndar con otro tipo de instrucciones.
Profesor Orlando Seplveda
Bloques en PL/SQL
El elemento principal del PL/SQL es el bloque, que contendr sentencias condicionales, bucles, llamadas a procedimientos y/o funciones, otros bloques (bloques anidados), etc... Si el bloque se declara usando las palabras reservadas PROCEDURE o FUNCTION se habla de un bloque nominado o nombrado. Si el bloque no se declara como procedimiento o funcin se trata de un bloque annimo.
Profesor Orlando Seplveda
Estructura de un bloque
Los bloques PL/SQL presentan una estructura especfica compuesta de tres partes bien diferenciadas: La seccin declarativa en donde se declaran todas las constantes y variables que se van a utilizar en la ejecucin del bloque. La seccin de ejecucin que incluye las instrucciones que se ejecutarn en el bloque PL/SQL. La seccin de excepciones en donde se definen los manejadores de errores que soportar el bloque PL/SQL. Cada una de las partes anteriores se delimita por una palabra reservada, de modo que un bloque PL/SQL se puede representar como sigue:
Profesor Orlando Seplveda
Bloque PL/SQL
DECLARE
/* Seccin de Declaraciones */
BEGIN
/* Seccin de Ejecucin */
EXCEPTION
/* Seccin de Excepciones */
END;
De las anteriores, nicamente la seccin de ejecucin es obligatoria, que queda delimitada entre las clusulas BEGIN y END.
Profesor Orlando Seplveda
Normas
Normas bsicas
La mayor parte de las normas de escritura en PL/SQL proceden de SQL, por ejemplo: Las palabras clave, nombres de tabla y columna, funciones, no distinguen entre maysculas y minsculas Todas las instrucciones finalizan con el signo de punto y coma (;), excepto las que encabezan un bloque. Las instrucciones pueden ocupar varias lneas Comentarios de varias lneas. Comienzan con /* y terminan con */ Comentarios de lnea simple. Son los que utilizan los signos - (doble guin). El texto a la derecha de los guiones se considera comentario (el de la izquierda no).
Profesor Orlando Seplveda
Comentarios:
Variables
Las variables se declaran en el apartado DECLARE del bloque. La sintaxis de la declaracin de variables es:
identificador [CONSTANT] tipoDeDatos [NOT NULL] [:= valorInicial] ; [siguienteVariable]
El operador := se usa para asignar valores a una variable. Con l se inicializa la variable con un valor determinado. En caso contrario sta contendr el valor NULL. La palabra CONSTANT indica que la variable no puede ser modificada (es una constante).
Profesor Orlando Seplveda
Variables
Ejemplos
pi CONSTANT NUMBER(9,7) := 3.1415927; radio NUMBER(5); cadena varchar2 := Juan
Los identificadores de Oracle deben tener 30 caracteres, empezar por letra y continuar con letras, nmeros o guiones bajos (_) (tambin es vlido el signo de dlar ($) y la almohadilla (#). No deben coincidir con nombres de columnas de las tablas ni con palabras reservadas (como SELECT).
En PL/SQL slo se puede declarar una variable por Profesor Orlando Seplveda lnea.
Tipos de datos
Ejemplos: nom personas.nombre%TYPE; precio NUMBER(9,2); precio_iva precio%TYPE; lFila persona%ROWTYPE; La variable precio_iva tomar el tipo de la variable precio (es decir NUMBER(9,2)) la variable nom tomar el tipo de datos asignado a la columna nombre de la tabla personas.
Profesor Orlando Seplveda
El paquete DBMS_OUTPUT
PL/SQL no dispone de funciones de E/S, no es un lenguaje creado para interactuar con el usuario, sino para trabajar con la base de datos. Oracle incorpora una serie de paquetes para ser utilizados dentro del cdigo PL/SQL. Es el caso del paquete DBMS_OUTPUT que sirve para utilizar funciones y procedimientos de escritura como PUT_LINE. DBMS_OUTPUT.PUT_LINE(Hola Mundo)
Ejemplo 2
SET SERVEROUTPUT ON DECLARE saludar VARCHAR2(20) := 'Hola Mundo'; BEGIN DBMS_OUTPUT.PUT_LINE(saludar); END;
En PL/SQL puede haber un bloque dentro de otro bloque. Un bloque puede anidarse dentro de:
- Un apartado BEGIN - Un apartado EXCEPTION
Hay que tener en cuenta que las variables declaradas en un bloque concreto, son eliminadas cuando ste acaba (con su END correspondiente).
Profesor Orlando Seplveda
Un ejemplo ms complejo
SET SERVEROUTPUT ON DECLARE sFecha varchar2(40); BEGIN select to_char(sysdate, 'dd/mm/yyyy hh24:mm:ss') into sFecha from dual; DBMS_OUTPUT.PUT_LINE('Hoy es: ' || sFecha); END;
Profesor Orlando Seplveda
Tarea
Crear un bloque annimo que declare paterno, materno y nombre y luego muestre el nombre completo concatenado. Crear un bloque annimo que muestre la suma de tres nmeros enteros.
v_nombre VARCHAR2(15);
BEGIN -- Recupera los datos del estudiante con el rut indicado SELECT paterno, materno, nombre INTO v_paterno, V_MATERNO, V_NOMBRE FROM estudiante WHERE rut = v_rut; DBMS_OUTPUT.PUT_LINE('Nombre del alumno: ' || v_paterno || ' ' || v_materno || ' ' || v_nombre); END;
Profesor Orlando Seplveda
PL/SQL no posee comandos ni funciones de entrada/salida de datos. Sin embargo, como ya vimos el semestre pasado, SQL tiene la posibilidad de incluir parmetros en sus consultas con el signo &, lo que se conoce como variable de sustitucin. PL/SQL acepta el uso de dichos parmetros en las variables. Efecte las correcciones siguientes en el bloque: v_rut VARCHAR(10); WHERE rut = '&v_rut'; Ejecute el bloque y proporcione el dato solicitado.
Profesor Orlando Seplveda
Controlando errores
Sin embargo. Si Ud. proporciona un rut inexistente, se producir un error. Ese error es posible interceptarlo. Agregue antes del END el cdigo siguiente:
EXCEPTION /* Inicio de la seccin de excepciones */ WHEN NO_DATA_FOUND THEN -- Manejamos la condicin de error DBMS_OUTPUT.PUT_LINE('Alumno no encontrado');
Profesor Orlando Seplveda