SlideShare ist ein Scribd-Unternehmen logo
1 von 199
Marcela Gómez Loja 2008
 
DECLARACIÓN DE VARIABLES
[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
 
Ejecutando Sentencias y Bloques PL/SQL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
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
[object Object],[object Object]
[object Object],[object Object],[object Object]
Conceptos de programa
La siguiente tabla contiene una idea general de los conceptos de programa de PL/SQL que usa un bloque básico.
 
 
Uso de Variables ,[object Object],[object Object],[object Object]
[object Object],[object Object]
Manejando variables en PL/SQL ,[object Object]
[object Object],[object Object]
Tipos de Variables ,[object Object],[object Object]
[object Object],[object Object],[object Object]
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.
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.
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.
Tipos de datos base escalares
 
 
 
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
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.
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:
 
 
SINTAXIS DE BLOQUE DE PL-SQL.  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
IDENTIFICADORES. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SINTAXIS DE BLOQUE DE PL-SQL.  ,[object Object],[object Object],[object Object],[object Object],[object Object]
COMENTARIOS EN CODIGO. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FUNCIONES DE SQL EN PL/SQL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
FUNCIONES DE SQL EN PL/SQL:  Ejemplo. ,[object Object],[object Object],[object Object],[object Object]
CONVERSION DE TIPOS DE DATOS  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
BLOQUE ANIDADOS Y ALCANCE DE LAS VARIABLES. ,[object Object],[object Object],[object Object],[object Object],[object Object]
ALCANCE DE LOS IDENTIFICADORES. ,[object Object],[object Object],[object Object]
CAPACITAR UN IDENTIFICADOR ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
OPERADORES EN PL/SQL. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PROGRAMACION GUIDELINES. ,[object Object],[object Object],[object Object],[object Object],[object Object]
CODIGO INDENTING. ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
Símbolos compuestos  Nota.-  No puede usarse  palabras reservadas como los identificadores a menos que ellos son adjuntos en la cita doble.
 
 
Objetivos ,[object Object],[object Object],[object Object],[object Object],[object Object]
Sentencias SQL en PL/SQL ,[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Recuperando datos usando PL/SQL ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Guía para recuperar datos en PL/SQL ,[object Object],[object Object],[object Object],[object Object],[object Object]
Sentencia SELECT en PL/SQL ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
Ejemplo 1 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ejemplo 2 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
Ejemplo 3 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Convención de nombres ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Manipulando Datos usando PL/SQL
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
Insertando datos ,[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Actualizando datos ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Borrando datos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Combinación de filas ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Convenciones de nombres ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object]
[object Object]
Cursor SQL ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Atributos de un cursor SQL ,[object Object],SQL%ROWCOUNT Número de filas afectadas por la sentencia SQL más reciente (valor íntegro) SQL%FOUND Atributo booleano que evalúa a VERDADERO  (TRUE) si la declaración  SQL  más reciente afecta una o varias filas. SQL%NOTFOUND Atributo booleano que evalúa a VERDADERO  (TRUE) si la declaración  SQL  más reciente no afecta alguna fila. SQL%ISOPEN Siempre evalúa a falso porque PL/SQL cierra los cursores implícitos inmediatamente después de su ejecución.
[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Sentencias   de   control   de   transacciones ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
 
 
Controlando Flujo de Ejecución de PL/SQL ,[object Object],[object Object],[object Object],[object Object]
SENTENCIA IF ,[object Object],[object Object],[object Object],[object Object],[object Object]
SENTENCIAS IF SIMPLES ,[object Object],[object Object],[object Object]
SENTENCIAS IF COMPUESTAS ,[object Object],[object Object],[object Object],[object Object],[object Object]
FLUJO DE EJECECUCIÓN DE SENTENCIAS  IF-THEN-ELSEIF ,[object Object],[object Object],IF condicion Acción THEN  Acción ELSE  condicion  ELSIF Acción THEN
Flujo de la ejecución de Sentencias  IF-THEN-ELSE ,[object Object],IF condicion Acción THEN  (incluye una sentencia IF) Acción ELSE  (incluye una sentencia IF)
SENTENCIAS IF-THEN-ELSE ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Expresiones CASE ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Expresiones CASE : Ejemplo ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Manipulando Nulos  ,[object Object],[object Object],[object Object],[object Object]
Tablas Lógicas  ,[object Object],AND TRUE FALSE NULL TRUE TRUE FALSE NULL FALSE FALSE FALSE FALSE NULL NULL FALSE NULL OR TRUE FALSE NULL TRUE TRUE TRUE TRUE FALSE TRUE FALSE NULL NULL TRUE NULL NULL NOT TRUE FALSE FALSE TRUE NULL NULL
Tablas Lógicas  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Condiciones Booleanas  ,[object Object],[object Object],[object Object],[object Object],V_REORDER_FLAG V_AVAILABLE_FLAG V_FLAG TRUE TRUE ? TRUE FALSE ? FALSE TRUE ? FALSE FALSE ?
Control Iterativo : Sentencias LOOP ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
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)
Ciclos While ,[object Object],[object Object],[object Object],[object Object],[object Object],WHILE condition LOOP  -- La condicion es evaluada al comienzo statement1;  -- de cada iteración statement2; … END LOOP; Use el WHILE para repetir sentencias mientras una condicion es verdadera
Ciclos WHILE : Ejemplo  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ciclos FOR ,[object Object],[object Object],[object Object],FOR counter IN [REVERSE] lower_bound .. Upper_bound LOOP statement1;  -- de cada iteración statement2; … END LOOP; Use un ciclo FOR para conseguir un atajo para el numero de iteraciones  No declare un contador; este es declarado implícitamente como un entero ‘ lower_bound .. Upper_bound’ es sintaxis requerida
Ciclo FOR ,[object Object],DECLARE  V_country_id  locations.country_id%TYPE := ‘CA’; V_location_id  locations.location_id%TYPE ; v_city  locations.city%TYPE := ‘Montreal’; BEGIN  SELECT MAX (locatio_id) INTO v_location_id FROM locations WHERE country_id = V_country_id; FOR i  IN 1…3 LOOP INSERT INTO locations (location_id, city, country_id) VALUES ((v_location_id + i ), v_city, v_country_id); END LOOP; END;
Ciclo FOR  ,[object Object],[object Object],[object Object]
Líneas directivas mientras se usan ciclos ,[object Object],[object Object],[object Object]
Ciclos Anidados y etiquetas ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ciclos Anidados y etiquetas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resumen  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
CAPITULO 5  Marcela Gómez
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],OBJETIVOS
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Composición de tipos de datos
Registros PL/SQL ,[object Object],[object Object],[object Object],[object Object],[object Object]
Creando un archivo PL/SQL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],SINTAXIS: TYPE type_name IS RECORD (field_declaration [, field_declaration]…); Identifier  type_name; Field_name {field_type | variable%TYPE | table.column%TYPE | table %ROWTYPE} [[NOT NULL] {:= | DEFAULT} expr]
Creando un registro PL/SQL  ,[object Object],[object Object],… TYPE emp_record_type IS RECORD (last_name  VARCHAR2(25), job_id  VARCHAR2(10), salary  NUMBER(8,2)); Emp_record  emp_record_type; …
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
El atributo %ROWTYPE ,[object Object],[object Object],[object Object]
Declarando registros con el atributo %ROWTYPE  ,[object Object],Asignando valores y registros Usted puede asignar una lista de valores comunes a un registro usando sentencias SELECT o FETCH. Asegúrese que el nombre de columnas aparezcan en el mismo orden como los campos en su registro. Usted también puede asignar un registroa otro si ellos tienen el mismo tipo de datos. DECLARE identifier  reference%ROWTYPE; Where :  identifier   es el nombre escogido por el registro como  un  todo reference   es el nombre
Ventajas de usar %ROWTYPE ,[object Object],[object Object],[object Object]
Los atributos %ROWTYPE ,[object Object],[object Object],[object Object],Dept_record  departtments%ROWTYPE; Emp_record  demployees%ROWTYPE;
Índices por tablas ,[object Object],[object Object],[object Object],[object Object]
Creando un índice por tabla  ,[object Object],Declare  un índice por tabla para almacenar nombres Ejemplo: TYPE type_name IS TABLE OF  {column_type | variable%TYPE | table.column%TYPE} [NOT NULL] | table.%ROWTYPE [INDEX BY BINARY_INTEGER]; Identifier type_name; … TYPE ename_table_type  IS TABLE OF employees.last_name%TYPE  INDEX BY BINARY_INTEGER; Ename_table ename_table_type;
Índice por estructura de la tabla  Identificador Único  Columna Binary_Integer  Scalar … 1 2 3 … … Jones Smith Maduro …
Creando un Índice por Tabla ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Usando Métodos de índice por tabla ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Índices por tablas de registros ,[object Object],[object Object],[object Object],DECLARE TYPE dept_table_type IS TABLE OF  departments%ROWTYPE INDEX BY BINARY_INTEGER; Dept_table  dept_table_type; -- cada elemento de dep_table es un registro
Ejemplo de índices por tabla de Registros ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Resumen ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
[object Object]
Objetivos  ,[object Object],[object Object],[object Object],[object Object],[object Object]
Acerca de los Cursores ,[object Object],[object Object],[object Object]
Funciones de cursores Explícitos  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Conjunto Activo  Cursor ,[object Object],[object Object],[object Object],[object Object],[object Object]
Controlando cursores explícitos ,[object Object],[object Object],[object Object],[object Object],[object Object],declare open fetch close Crea un área SQL  Identifica el conjunto activo Carga la fila actual dentro de las variable Prueba las filas existente Retorna a fetch si las filas son encontradas EMPTY? Libera el conjunto activo No Si
Controlando cursores explícitos  ,[object Object],[object Object],[object Object],[object Object],Cursor puntero
Controlando cursores explícitos ,[object Object],[object Object],[object Object],[object Object],Puntero del cursor Continua hasta quedarse vacio
Controlando cursores explícitos  ,[object Object],[object Object],[object Object],Cerrar el cursor . Puntero del cursor .
Declarando el cursor ,[object Object],CURSOR cursor_name IS  Select_statement; ,[object Object],[object Object]
Declarando un cursor  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Abriendo el cursor ,[object Object],OPEN cursor_name; ,[object Object],[object Object],[object Object]
Datos fetching de el cursor  ,[object Object],FETCH cursor_name INTO [variable1, variable2, …] |record_name]; ,[object Object],[object Object],[object Object],[object Object]
Buscando datos desde el cursor ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cerrando el cursor  ,[object Object],CLOSE cursor_name; ,[object Object],[object Object],[object Object]
Atributos explícitos de los cursores ,[object Object],Atributo Tipo Descripción %ISOPEN Booleana Evaluar VERDADERO si el cursor el abierto %NOTFOUND Booleana Evaluar V si el mas reciente fetch no retorna una fila  %FOUND Booleana Evalúa Verdadero si el mas reciente fetch retorna una fila; complementa %NOTFOUND %ROWCOUNT Numeral Evalúa el numero total de filas retornadas a distancia
El atributo %ISOPEN  ,[object Object],[object Object],[object Object],IF NOT emp_cursor%ISOPEN THEN OPEN emp_cursor; END IF ; LOOP FETCH emp_cursor …
Controlando fetches múltiples ,[object Object],[object Object],[object Object]
Los atributos %NOTFOUND y % ROWCOUNT ,[object Object],[object Object]
Ejemplo: ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CURSORES Y REGISTROS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],emp_record Employee_id  last_name 100  King
Ciclos LOOP de Cursores ,[object Object],FOR record_name IN cursor_name LOOP statement1; Statement2; … END LOOP; ,[object Object],[object Object],[object Object]
Ciclos FOR para cursores ,[object Object],DECLARE CURSOR emp_cursor IS  SELECT last_name, department_id last_name FROM employees BEGIN FOR emp_record IN emp_cursor LOOP -- implicit open and implicit fetch occur IF  emp_record.department_id = 80 THEN … END LOOP; -- implicit close occurs END;
Ciclos FOR para cursores usando subconsultas ,[object Object],[object Object],BEGIN FOR emp_record IN (SELECT last_name, department_id FROM  employees) LOOP   IF  emp_record.department_id = 80 THEN   … END LOOP; -- implicit close occurs END;
Resumen ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object]
[object Object]
Objetivos  ,[object Object],[object Object],[object Object],[object Object],[object Object]
Cursores con parámetros ,[object Object],CURSOR cursor_name [(parameter_name  datatype, …)] IS  Select_statement; ,[object Object],[object Object],OPEN cursor_name (parameter_value, . . .);
Cursores con parametros ,[object Object],DECLARE CURSOR emp_cursor (p_deptno NUMBER, p_job VARCHAR2) IS   SELECT employee_id,  last_name  FROM employees WHERE department_id = p_deptno AND job_id = p_job; BEGIN OPEN emp_cursor (80, ‘SA_REP’); … CLOSE emp_cursor; OPEN emp_cursor (60, ‘IT_PROG’); … END;
La clausula FOR UPDATE ,[object Object],SELECT… FROM FOR UPDATE [OF column_reference] [NOWAIT]; ,[object Object],[object Object]
La clausula FOR UPDATE ,[object Object],DECLARE CURSOR emp_cursor IS SELECT employees_id, last_name, department_name FROM employees , departments WHERE employees, departments_id = departments.department_id AND employees.department_id =80 FOR UPDATE OF salary NOWAIT;
La clausula WHERE CURRENT OF ,[object Object],WHERE CURRENT OF cursor: ,[object Object],[object Object],[object Object]
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
Cursores con SUBCONSULTAS ,[object Object],DECLARE CURSOR my_cursor IS SELECT t1.department_id, t1.department_name, t2.staff FROM departments t1,(select departmen_id,COUNT(*) AS  STAFF FROM employees GROUP BY department_id) t2 WHERE t1.department_id =t2.department_id AND t2.stuff >=3; …
RESUMEN ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
La clausula FOR UPDATE ,[object Object],DECLARE CURSOR emp_cursor IS SELECT employees_id, last_name, department_name FROM employees , departments WHERE employees, departments_id = departments.department_id AND employees.department_id =80 FOR UPDATE OF salary NOWAIT;
[object Object]
[object Object]
Objetivos  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Manejando excepciones con PL/SQL  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Manejando excepciones
Tipos de Excepciones ,[object Object],[object Object],[object Object],[object Object],[object Object]
Atrapando excvepciones ,[object Object],EXCEPTION WHEN exception1 [OR exception2 . . . ] THEN statement1; statement2; … [WHEN exception3 [OR exception4 …] THEN statement1; statement2; … ] [WHEN OTHERS THEN  statement1; statement2; … ]
Atrapando excepciones  con líneas de guías  ,[object Object],[object Object],[object Object],[object Object]
Atrapando errores predefinidos en el servidor Oracle ,[object Object],[object Object],[object Object],[object Object]
Excepciones predefinidas ,[object Object],BEGIN … EXCEPTION WHEN NO DATA FOUND THEN  statement1; statement2; WHEN TOO_MANY_ROWS THEN statement1; WHEN NO OTHERS THEN  statement1; statement2; statement3; END;
Atrapando errores no predefinidos del Servidor Oracle ,[object Object],Sección de declaración  Seccion Exception-handling Declare Associate reference
Errores no predefinidos  ,[object Object],DEFINE  p_deptno = 10 DECLARE e_emps_remaining EXCEPTION; PRAGMA EXCEPTION_INIT (e_emps_remaining, -2292); BEGIN DELETE FROM departments WHERE department_id = &p_deptno; COMMIT; EXCEPTION WHEN e_emps_remaining THEN  DBMS_OUTOPUT.PUT_LINE (‘no puede eliminmar dept’ ||) TO_CHAR (&p_deptno ) || ‘. Employees existe. ’); END;
Funciones para atrapar excepciones ,[object Object],[object Object]
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;
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
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;
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
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;
Procedimiento RAISE_APLICATION_ERROR ,[object Object],Raise_aplication_error (erroe_number, message [, {TRUE | FALSE } ]); ,[object Object],[object Object]
Procedimiento RAISE_APLICATION_ERROR ,[object Object],[object Object],[object Object],[object Object]
RAISE_APLICATION_ERROR ,[object Object],BEGIN … DELETE FROM EMPLOYEES WHERE  manager_id = v_mgr; IF SQL%NOTFOUND THEN RAISE APLICATION_ERROR (-20202, ‘este no es un manejador valido’); END IF; … ,[object Object],… EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION ERROR(-20201, ‘el administrador no es empleado valido’); END;
Resumen ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CAPITULO 9
Objetivos ,[object Object],[object Object],[object Object],[object Object],[object Object]
objetivos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Vista general de subprogramas  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

3. lenguajes de cuarta generación
3. lenguajes de cuarta generación3. lenguajes de cuarta generación
3. lenguajes de cuarta generaciónevelyna villamar
 
Grupo 5-modelos-de-procesos-de-software
Grupo 5-modelos-de-procesos-de-softwareGrupo 5-modelos-de-procesos-de-software
Grupo 5-modelos-de-procesos-de-softwarePrimoLaura
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVANoralma Yanez
 
Packages in PL/SQL
Packages in PL/SQLPackages in PL/SQL
Packages in PL/SQLPooja Dixit
 
Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...
Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...
Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...Yessenia I. Martínez M.
 
02 Writing Executable Statments
02 Writing Executable Statments02 Writing Executable Statments
02 Writing Executable Statmentsrehaniltifat
 
Diseñado interfaces "intuitivas" mediante patrones de diseño
Diseñado interfaces "intuitivas" mediante patrones de diseñoDiseñado interfaces "intuitivas" mediante patrones de diseño
Diseñado interfaces "intuitivas" mediante patrones de diseñoEugenia Casabona
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en JavaUCE
 
Especificaciones de Requerimientos SRS
Especificaciones de Requerimientos SRSEspecificaciones de Requerimientos SRS
Especificaciones de Requerimientos SRSsullinsan
 
Introducción a los patrones de diseño
Introducción a los patrones de diseñoIntroducción a los patrones de diseño
Introducción a los patrones de diseñoSoftware Guru
 
Modelo vista controlador vas Programacion por n capas
Modelo vista controlador vas Programacion por n capasModelo vista controlador vas Programacion por n capas
Modelo vista controlador vas Programacion por n capasAlex Uhu Colli
 
Inyeccion sql
Inyeccion sqlInyeccion sql
Inyeccion sqlobispo28
 
Qlik Tips 20220816 データモデルベストプラクティス
Qlik Tips 20220816 データモデルベストプラクティスQlik Tips 20220816 データモデルベストプラクティス
Qlik Tips 20220816 データモデルベストプラクティスQlikPresalesJapan
 
Framework Laravel
Framework LaravelFramework Laravel
Framework LaravelRafael Lobo
 
Sql interview questions and answers
Sql interview questions and  answersSql interview questions and  answers
Sql interview questions and answerssheibansari
 

Was ist angesagt? (20)

Unit 4 plsql
Unit 4  plsqlUnit 4  plsql
Unit 4 plsql
 
SQL
SQLSQL
SQL
 
Pl sql guide
Pl sql guidePl sql guide
Pl sql guide
 
3. lenguajes de cuarta generación
3. lenguajes de cuarta generación3. lenguajes de cuarta generación
3. lenguajes de cuarta generación
 
Clase 5
Clase 5Clase 5
Clase 5
 
Grupo 5-modelos-de-procesos-de-software
Grupo 5-modelos-de-procesos-de-softwareGrupo 5-modelos-de-procesos-de-software
Grupo 5-modelos-de-procesos-de-software
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVA
 
Packages in PL/SQL
Packages in PL/SQLPackages in PL/SQL
Packages in PL/SQL
 
Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...
Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...
Plan de Desarrollo de Software - Sistema Gestor de Oferta y Adjudicación de P...
 
02 Writing Executable Statments
02 Writing Executable Statments02 Writing Executable Statments
02 Writing Executable Statments
 
Diseñado interfaces "intuitivas" mediante patrones de diseño
Diseñado interfaces "intuitivas" mediante patrones de diseñoDiseñado interfaces "intuitivas" mediante patrones de diseño
Diseñado interfaces "intuitivas" mediante patrones de diseño
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en Java
 
Especificaciones de Requerimientos SRS
Especificaciones de Requerimientos SRSEspecificaciones de Requerimientos SRS
Especificaciones de Requerimientos SRS
 
Introducción a los patrones de diseño
Introducción a los patrones de diseñoIntroducción a los patrones de diseño
Introducción a los patrones de diseño
 
Modelo vista controlador vas Programacion por n capas
Modelo vista controlador vas Programacion por n capasModelo vista controlador vas Programacion por n capas
Modelo vista controlador vas Programacion por n capas
 
Patrones GOF
Patrones GOFPatrones GOF
Patrones GOF
 
Inyeccion sql
Inyeccion sqlInyeccion sql
Inyeccion sql
 
Qlik Tips 20220816 データモデルベストプラクティス
Qlik Tips 20220816 データモデルベストプラクティスQlik Tips 20220816 データモデルベストプラクティス
Qlik Tips 20220816 データモデルベストプラクティス
 
Framework Laravel
Framework LaravelFramework Laravel
Framework Laravel
 
Sql interview questions and answers
Sql interview questions and  answersSql interview questions and  answers
Sql interview questions and answers
 

Ähnlich wie PL/SQL (20)

Cap I Plsql
Cap I PlsqlCap I Plsql
Cap I Plsql
 
Capitulo 2
Capitulo 2Capitulo 2
Capitulo 2
 
Apunte plsql
Apunte plsqlApunte plsql
Apunte plsql
 
Sesion06b - Introducción al PL-SQL (Oracle)
Sesion06b - Introducción al PL-SQL (Oracle)Sesion06b - Introducción al PL-SQL (Oracle)
Sesion06b - Introducción al PL-SQL (Oracle)
 
Conceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sqlConceptos basicos de programacion con pl sql
Conceptos basicos de programacion con pl sql
 
Pl Sql
Pl SqlPl Sql
Pl Sql
 
01-declaracion-de-variables
01-declaracion-de-variables01-declaracion-de-variables
01-declaracion-de-variables
 
Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2Yungan geovanny 6_s_ti_2
Yungan geovanny 6_s_ti_2
 
103305862 t-sql
103305862 t-sql103305862 t-sql
103305862 t-sql
 
t-sql
t-sqlt-sql
t-sql
 
PLSQL y paquetes
PLSQL y paquetesPLSQL y paquetes
PLSQL y paquetes
 
Comandos SQL
Comandos SQLComandos SQL
Comandos SQL
 
Diapositivas transact sql
Diapositivas transact sqlDiapositivas transact sql
Diapositivas transact sql
 
lenguaje transact
lenguaje transactlenguaje transact
lenguaje transact
 
lenguaje transact
lenguaje transactlenguaje transact
lenguaje transact
 
Sql Procedural
Sql ProceduralSql Procedural
Sql Procedural
 
PL SQL Diplomado Oracle
PL SQL Diplomado OraclePL SQL Diplomado Oracle
PL SQL Diplomado Oracle
 
Act4 screencast-bdatos cmch
Act4 screencast-bdatos cmchAct4 screencast-bdatos cmch
Act4 screencast-bdatos cmch
 
Statement
StatementStatement
Statement
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 

PL/SQL

  • 2.  
  • 4.
  • 5.
  • 6.  
  • 7.
  • 8.
  • 9.
  • 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
  • 11.
  • 12.
  • 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.
  • 26. Tipos de datos base escalares
  • 27.  
  • 28.  
  • 29.  
  • 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.
  • 51.  
  • 52.  
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.  
  • 92.  
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 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)
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118. CAPITULO 5 Marcela Gómez
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 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
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 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;
  • 192.
  • 193.
  • 194.
  • 195.
  • 197.
  • 198.
  • 199.