10. Tipos de bloque PL/SQL es un programa que tiene uno o más bloques. Estos bloques pueden estar separados o anidados unos con otros. Por lo tanto, un bloque puede representar una pequeña parte de otro bloque. [DECLARE] BEGIN [ EXCEPTION ] END; -- statements Anónimo DECLARE name BEGIN [EXCEPTION] END; IS --statements Procedimiento FUNTION name BEGIN [EXCEPTION] END; RETURN datatype --statements IS RETURN value; Función
14. La siguiente tabla contiene una idea general de los conceptos de programa de PL/SQL que usa un bloque básico.
15.
16.
17.
18.
19.
20.
21.
22.
23. Declaración de Variables PL/SQL Sintaxis: Identifier: es el nombre de la variable CONSTANT: restringe la variable con el propósito de que su valor no pueda cambiar; las constantes deben ser inicializadas.
24. Data type: puede ser un escalar, compuesto, referenciado o LOB. NOT NULL: restringe a la variable para que tenga un valor . Expr: es cualquier expresión PL/SQL que puede ser una expresión literal, otra variable o una expresión que involucra operadores y funciones.
25. Inicialización de variables y palabras claves Identifier: es el nombre de la variable escalar Expr: puede ser una variable, literal o llamada a una función, pero no a una columna de la base de datos. Las variables son inicializadas todo el tiempo en un bloque o subprograma. Por defecto las variables son inicializadas con NULL. Default: se puede usar la palabra clave de default en lugar del operador de asignación. NOT NULL: imponer la estricción NOT NULL cuando la variable debe contener un valor.
30. Declaración de Variables Booleanas Este tipo de variables nos permiten realizar comparaciones a través de expresiones booleanas, estas pueden ser simples o complejas separadas por operadores relacionales. Ejemplo: v_sal1 := 50000; v_sal2 := 60000; La siguiente expresión es verdadera v_sal1 < v_sal2
31. Declaración y inicialización de una variable booleana DECLARE v_flag BOOLEAN:= FALSE; BEGIN v_flag := TRUE; END; DBMS_OUTPUT.PUT_LINE Se puede declarar una variable principal o anfitriona, referenciarla en un bloque PL/SQL, y luego presentar su contenido en iSQL*Plus usando el comando PRINT. Otra alternativa para presentar que la información de un bloque de PL/SQL es DBMS_OUTPUT.PUT_LINE es un paquete oracle-supplied, y PUT_LINE es un procedimiento dentro de ese paquete.
32. Dentro de un bloque PL/SQL, referencia DBMS_OUTPUT.PUT_LINE y entre paréntesis se especifica lo que se quiere que presente. El paquete debe estar primero permitido en una sesión en iSQL*Plus. Para ejecutar el paquete en iSQL*Plus se debe realizar con el comando SERVEROUTPUT ON. Ejemplo:
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50. Símbolos compuestos Nota.- No puede usarse palabras reservadas como los identificadores a menos que ellos son adjuntos en la cita doble.
107. Ciclos Básicos Ciclos Básicos La mas simple forma de las sentencias LOOP es la básica, la cual encierra una secuencia de sentencias entre las palabras reservadas LOOP y END LOOP. Un ciclo básico permite la ejecución de al menos una sentencia como mínimo. LA sentencia EXIT Usted puede usar EXIT para terminar el ciclo. LOOP -- delimitado statement1; -- sentencias … EXIT [WHEN condition] -- Termina sentencia END LOOP; -- delimitador Condicion: Es una variable booleana o expresión (TRUE, FALSE, o NULL)
124. Estructura de registros PL/SQL Field 1 (data type) Field2(data type) Field3 (data type) Ejemplo: Field 1 (data type) Field2(data type) Field3 (data type) Employee_id number(6) last_name varchar2(25) job_id varchar2(10) 100 King AD_PRES
125.
126.
127.
128.
129.
130.
131. Índice por estructura de la tabla Identificador Único Columna Binary_Integer Scalar … 1 2 3 … … Jones Smith Maduro …
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170. La clausula WHERE CURRENT OF DECLARE CURSOR sal_cursor IS SELECT e.department_id, employee_id, last_name, salary FROM employees e, departments d WHERE d.department.id c = e. department_id AND d.department id ca =60 FOR UPDATE OF salary NOWAIT; BEGIN FOR emp_record in sal_cursor LOOP if emprecord.salary <5000 THEN UPDATE employees SET salary = emp_record.salary * 1.10 WHERE CURRENT OF sal_cursor; AND IF END LOOP; END
187. Funciones para atrapar excepciones DECLARE v_error_code NUMBER; v_error_message VARCHAR2(255); BEGIN … EXCEPTION … WHEN OTHERS THEN ROLLBACK; v_error_code := SQLCODE; v_error_mesage := SQLERRM; INSERT INTO errors VALUES (v_error_code , v_error_message); END;
188. Atrapando excepciones User-defined Sección ejecutable Sección de declaración Seccion Exception-handling Declare Raise reference Nombre de la excepción Levantar explícitamente La excepción usando la Sentencia RAISE Manipular la excepción De levantamiento
189. Excepciones user-defined DEFINE p_departmente_desc = ‘Information tecnologhy’ DEFINE p_departmente_number= 300 DECLARE e_invalid_department EXCEPTION; BEGIN UPDATE departments; SET department_name = ‘&p_department_desc’ WHERE department_id = &p_department_number; IF SQL%NOTFOUND THEN RAISE e_invalid_department; END IF; COMMIT; EXCEPTIO WHEN e_invalid_department THEN DBMS_OUTPUT.PUT_LINE (‘no such department id’); END;
190. Llamando entornos iSQL *Plus Despliega el numero de error y mensaje a la pantalla Constructor de procedimiento Despliega el numero de error y mensaje a la pantalla Formas del desarrollador de Oracle Accesa al numero de error y mensaje en un trigger Aplicación Precompilada Accesa al numero de error a traves de la estructura de datos SQLCA Un Bloque PL/SQL incluído Atrapa excepciones en routinas de exeption-handling del bloque incluído
191. Propagando excepciones DECLARE e_no_rows EXCEPTION; e_integrity EXCEPTION; PRAGMA EXCEPTION_INIT (e_integrity, -2292) BEGIN FOR c_record IN emp_cursor LOOP BEGIN SELECT … UPDATE … IF SQL%NOTFOUND THEN RAISE e_no_rows; END IF; END; END LOOP; EXCEPTION WHEN e_integrity THEN … WHEN e_no_rows THEN … END;