Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesin 6
Introduccin a PL/SQL
Profesor: Ing. Juan Deza Ari
Objetivos de la Sesin
Conocer
los beneficios del lenguaje de programacin PL/SQL Distinguir las diferentes secciones que conforman un bloque PL/SQL
Temas a tratar
Introduccin
Introduccin a PL/SQL
PL/SQL
Lenguaje de programacin que se utiliza para acceder a bases de datos ORACLE desde distintos entornos. Est integrado con el servidor de base de datos de modo que su cdigo puede ser procesado de forma rpida y eficiente.
PL/SQL
PL/SQL significa Lenguaje Procedimental SQL Trabaja con :
Variables y tipos de datos Estructuras de control Procedimientos y funciones Tipos de objetos y mtodos
Combina la potencia y la flexibilidad del SQL con la de un lenguaje 3GL Lenguaje estructurado y potente Cdigo es procesado de forma rpida y eficiente Permite empaquetar rdenes SQL Minimiza comunicacin entre cliente y el servidor de Base de Datos
Ejemplo
DECLARE /* Declaracin de variables a utilizar v_NewMajor VARCHAR2(10):= 'HISTORY; v_LastName VARCHAR2(10):= 'URMANN; BEGIN /* Actualiza la tabla students */ UPDATE students SET major = v_NewMajor WHERE last_name = v_LastName;
*/
IF SQL%NOTFOUND THEN INSERT INTO students (ID, last_name, major) VALUES (seq_student.NEXTVAL, v_LastName, v_NewMajor); END IF; END;
Bloques PL/SQL
La unidad bsica en PL/SQL es el bloque Un programa PL/SQL puede estar compuesto por bloques secuenciales o anidados Consta de tres secciones:
Seccin Declarativa
Aqui se declaran o localizan todas las variables, tipos, cursores y subprogramas locales usados por el bloque. Pueden aparecer instrucciones SQL como instrucciones procedimentales Esta seccin es opcional
Seccin Ejecutable
Seccin principal del bloque Se incluyen tanto las sentencias sql como las procedimentales Es la nica seccin es obligatoria
BEGIN -- Seccin ejecutable DBMS_OUTPUT.PUT_LINE('BIENVENIDOS A ORACLE PLSQL'); END; PARA ACTIVAR LA VISUALIZACION DE MENSAJES EN EL SQLPLUS Set serveroutput on size 30000
Seccin de Excepciones
Se usa para responder a los errores que se presenten en la ejecucin del programa El cdigo de esta seccin no se utiliza a menos que que ocurra un error Esta seccin es opcional
EXCEPTION -- Seccin de tratamiento de errors WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('NO HAY DATOS');
Ejemplo de Bloque
DECLARE /* Seccin declarativa */ v_total number(4,2); v_numero1 number(4,2); v_numero2 number(4,2); BEGIN /* Seccin ejecutable */ v_numero1:=25; v_numero2:=5; v_total:= v_numero1/v_numero2; dbms_output.put_line('Resultado:' || v_total); EXCEPTION /* Seccin de excepciones */ WHEN zero_divide THEN dbms_output.put_line('Error de divisin por Cero'); WHEN others THEN dbms_output.put_line('Error Desconocido!!!'); END;
Bloques Anidados
Un bloque puede contener otros bloques Se pueden anidar bloques en la seccin ejecutable o en la seccin de excepciones No se puede anidar bloques dentro de la seccin declarativa
Comentarios
Un comentario monolnea comienza con dos guiones (--) y contina hasta el final de la lnea Un comentario multilnea comienza con /* y termina con */
Declaracin de variables
Son espacios de memoria que pueden contener valores de datos A medida que se ejecuta el programa puede cambiar el contenido de la variable Se declaran en la seccin declarativa de un bloque Cada una de ellas tiene un nombre y un tipo de dato especfico
Sintaxis de la declaracin
nombre_variable tipo [CONSTANT] [NOT NULL][:=valor]
convierte a la variable en una constante, donde su valor inicial es de solo lectura permite hacer obligatorio inicializar la variable
Ejemplo
DECLARE v_total number(4,2); v_numero1 number(4,2) :=25; -- asignando valor inicial v_numero2 number(4,2) NOT NULL :=5; -- obligando inicializar la variable BEGIN v_total:= v_numero1/v_numero2; dbms_output.put_line('Resultado:' || v_total);
EXCEPTION WHEN others THEN dbms_output.put_line('Error Desconocido!!!'); END;
Utilizacin de %TYPE
Permite definir una variable con el tipo de dato que tiene una columna de una tabla determinada El uso de %TYPE permite que los programas PL/SQL sean ms flexibles y capaces de adaptarse a las definiciones cambiantes de las bases de datos
Utilizacin de %ROWTYPE
Permite definir un registro en PL/SQL con los mismos tipos que una fila de una tabla determinada Si cambia la definicin de la tabla, %ROWTYPE tambin lo hace
DECLARE variable_registro
tabla%ROWTYPE;
Ejemplo
DECLARE v_EmpRecord emp%ROWTYPE; v_Ename emp.ename%TYPE; v_Job emp.job%TYPE; BEGIN -- Recupera un registro de la tabla emp y lo almacena en v_EmpRecord SELECT * INTO v_EmpRecord FROM emp WHERE empno = 7369; DBMS_OUTPUT.PUT_LINE('Emp: ' || v_EmpRecord.ename || ' v_EmpRecord.job); Puesto: ' ||
/* Recupera dos campos de la tabla emp y los almacena en dos variables*/ SELECT ename, job INTO v_Ename, v_Job FROM emp WHERE empno = 7698; DBMS_OUTPUT.PUT_LINE('Emp: ' || v_Ename || ' Puesto: ' || v_Job); END;
Operadores y Funciones
Operadores
Los operadores lgicos, aritmticos y de concatenacin usados en PL/SQL son los mismos que se utilizan en SQL.
Operador
** , NOT + , - , ||
Operacin
Exponenciacin, negacin lgica Suma, resta, concatenacin
*,/
= , < , > , <= , >=, <>, !=, IS NULL, LIKE, BETWEEN
Multiplicacin, divisin
Comparacin
AND
OR
Conjuncin
Inclusin
Funciones
La mayora de funciones vlidas en SQL se pueden utilizar en PL/SQL con excepcin de las funciones de grupo las cuales se aplican a grupos de filas de una tabla por tanto solo pueden ir dentro de sentencias SQL.
DECLARE v_Sal NUMBER; v_name VARCHAR2(50); v_Fecha DATE; BEGIN v_Sal := ROUND(2585.6452, 2); v_name := INITCAP('lenguaje de programacin vi'); v_Fecha := TO_DATE('06/05/2005', 'DD/MM/YYYY'); DBMS_OUTPUT.PUT_LINE(' Curso: ' || v_name || ' Fecha: ' || TO_CHAR(v_Fecha,'DD DAY MONTH YYYY')); DBMS_OUTPUT.PUT_LINE(' Salario: ' || v_Sal); END;
Final
Alguna
duda?
pregunta o alguna
Gracias.