asjfahfakfsahasfas
-
Upload
jescobar010 -
Category
Documents
-
view
214 -
download
1
description
Transcript of asjfahfakfsahasfas
-
DCopyright 2004, Oracle. Todos los Derechos Reservados.
Revisin de PL/SQL
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Estructura en Bloque para BloquesPL/SQL Annimos
DECLARE (opcional) Declarar objetos PL/SQL que se deben utilizar en
este bloque BEGIN (obligatorio)
Definir las sentencias ejecutables EXCEPTION (opcional)
Definir las acciones que tienen lugar si se produce un error o una excepcin
END; (obligatorio)
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Declaracin de Variables PL/SQL
Sintaxis: Ejemplos:
identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];
Declare v_hiredate DATE; v_deptno NUMBER(2) NOT NULL := 10; v_location VARCHAR2(13) := 'Atlanta'; c_ comm CONSTANT NUMBER := 1400; v_count BINARY_INTEGER := 0; v_valid BOOLEAN NOT NULL := TRUE;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Declaracin de Variables con el Atributo %TYPE
Ejemplos: ... v_ename employees.last_name%TYPE; v_balance NUMBER(7,2); v_min_balance v_balance%TYPE := 10; ...
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Creacin de un Registro PL/SQL
Declarar variables para almacenar el nombre, el trabajo y el salario de un nuevo empleado. Ejemplo: ... TYPE emp_record_type IS RECORD (ename VARCHAR2(25), job VARCHAR2(10), sal NUMBER(8,2)); emp_record emp_record_type; ...
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Atributo %ROWTYPE
Ejemplos: Declarar una variable para almacenar la misma
informacin sobre un departamento que se almacena en la tabla DEPARTMENTS.
Declarar una variable para almacenar la misma informacin sobre un empleado que se almacena en la tabla EMPLOYEES.
dept_record departments%ROWTYPE;
emp_record employees%ROWTYPE;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Creacin de una Tabla PL/SQL
DECLARE TYPE ename_table_type IS TABLE OF employees.last_name%TYPE INDEX BY BINARY_INTEGER; TYPE hiredate_table_type IS TABLE OF DATE INDEX BY BINARY_INTEGER; ename_table ename_table_type; hiredate_table hiredate_table_type; BEGIN ename_table(1) := 'CAMERON'; hiredate_table(8) := SYSDATE + 7; IF ename_table.EXISTS(1) THEN INSERT INTO ... ... END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Sentencias SELECT en PL/SQL
La clusula INTO es obligatoria. Ejemplo: DECLARE v_deptid NUMBER(4); v_loc NUMBER(4); BEGIN SELECT department_id, location_id INTO v_deptno, v_loc FROM departments WHERE department_name = 'Sales'; ... END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Insercin de Datos
Agregar nueva informacin de empleado a la tabla EMPLOYEES. Ejemplo: DECLARE v_empid employees.employee_id%TYPE; BEGIN SELECT employees_seq.NEXTVAL INTO v_empno FROM dual; INSERT INTO employees(employee_id, last_name, job_id, department_id) VALUES(v_empno, 'HARDING', 'PU_CLERK', 30); END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Actualizacin de Datos
Aumentar el salario de todos los empleados de la tabla EMPLOYEES que sean oficinistas en el departamento de compras. Ejemplo: DECLARE v_sal_increase employees.salary%TYPE := 2000; BEGIN UPDATE employees SET salary = salary + v_sal_increase WHERE job_id = 'PU_CLERK'; END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Supresin de Datos
Suprimir filas que pertenecen al departamento 190 de la tabla EMPLOYEES. Ejemplo: DECLARE v_deptid employees.department_id%TYPE := 190; BEGIN DELETE FROM employees WHERE department_id = v_deptid; END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Sentencias COMMIT y ROLLBACK
Iniciar una transaccin con el primer comando DML despus de una sentencia COMMIT o ROLLBACK.
Utilizar las sentencias SQL COMMIT y ROLLBACK para terminar una transaccin de forma explcita.
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Atributos de Cursor SQL
Con los atributos de cursor SQL, puede probar el resultado de las sentencias SQL.
Nmero de filas afectadas por la sentencia SQL ms reciente (valor entero) Atributo booleano que se evala como TRUE si la sentencia SQL ms reciente afecta a una o ms filas Atributo booleano que se evala como TRUE si la sentencia SQL ms reciente no afecta a ninguna fila Siempre se evala como FALSE ya que PL/SQL cierra los cursores implcitos inmediatamente despus de que se ejecuten
SQL%ROWCOUNT SQL%FOUND SQL%NOTFOUND SQL%ISOPEN
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Sentencias IF, THEN y ELSIF
Para un valor concreto introducido, se puede devolver un valor calculado. Ejemplo: . . . IF v_start > 100 THEN v_start := 2 * v_start; ELSIF v_start >= 50 THEN v_start := 0,5 * v_start; ELSE v_start := 0,1 * v_start; END IF; . . .
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Bucle Bsico
Ejemplo:
DECLARE v_ordid order_items.order_id%TYPE := 101; v_counter NUMBER(2) := 1; BEGIN LOOP INSERT INTO order_items(order_id,line_item_id) VALUES(v_ordid, v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 10; END LOOP; END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Bucle FOR
Inserte los primeros 10 elementos de nueva lnea para el pedido nmero 101. Ejemplo:
DECLARE v_ordid order_items.order_id%TYPE := 101; BEGIN FOR i IN 1..10 LOOP INSERT INTO order_items(order_id,line_item_id) VALUES(v_ordid, i); END LOOP; END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Bucle WHILE
Ejemplo:
ACCEPT p_price PROMPT 'Enter the price of the item: ' ACCEPT p_itemtot - PROMPT 'Enter the maximum total for purchase of item: ' DECLARE ... v_qty NUMBER(8) := 1; v_running_total NUMBER(7,2) := 0; BEGIN ... WHILE v_running_total < &p_itemtot LOOP ... v_qty := v_qty + 1; v_running_total := v_qty * &p_price; END LOOP; ...
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Volver a FETCH si se encuentran filas
No
Control de Cursores Explcitos
DECLARE
Crear un rea SQL con nombre
Identificarel juego activo
OPEN
Probar filas existentes
VACO?
Liberarel juegoactivo
CLOSES
Cargar la fila actualen variables
FETCH
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Declaracin del Cursor
Ejemplo: DECLARE CURSOR c1 IS SELECT employee_id, last_name FROM employees; CURSOR c2 IS SELECT * FROM departments WHERE department_id = 10; BEGIN ...
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Apertura del Cursor
Sintaxis: Abrir el cursor para ejecutar la consulta e
identificar el juego activo. Si la consulta no devuelve ninguna fila, no se
emite ninguna excepcin. Utilizar los atributos de cursor para probar el
resultado despus de una recuperacin.
OPEN cursor_name;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Recuperacin de Datos del Cursor
Ejemplos:
FETCH c1 INTO v_empid, v_ename; ... OPEN defined_cursor; LOOP FETCH defined_cursor INTO defined_variables EXIT WHEN ...; ... -- Process the retrieved data ... END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Cierre del Cursor
Sintaxis: Cerrar el cursor al terminar el procesamiento de
las filas. Volver a abrir el cursor si es necesario. No intentar recuperar datos de un cursor despus
de cerrarlo.
CLOSE cursor_name;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Atributos de Cursor Explcito
Obtener informacin sobre el estado de un cursor. Atributo Tipo Descripcin
%ISOPEN BOOLEAN Se evala en TRUE si el cursorest abierto.
%NOTFOUND BOOLEAN Se evala en TRUE si la recuperacinms reciente no devuelve una fila.
%FOUND BOOLEAN Se evala en TRUE si la recuperacinms reciente devuelve una fila; complementode %NOTFOUND
%ROWCOUNT NUMBER Se evala en el nmero total de filas devueltas hasta el momento.
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Bucles FOR de Cursor
Recuperar empleados de uno en uno hasta que no quede ninguno. Ejemplo: DECLARE CURSOR c1 IS SELECT employee_id, last_name FROM employees; BEGIN FOR emp_record IN c1 LOOP -- implicit open and implicit fetch occur IF emp_record.employee_id = 134 THEN ... END LOOP; -- implicit close occurs END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Clusula FOR UPDATE
Recuperar los pedidos de cantidades superiores a $1.000 que se han procesado hoy. Ejemplo: DECLARE CURSOR c1 IS SELECT customer_id, order_id FROM orders WHERE order_date = SYSDATE AND order_total > 1000.00 ORDER BY customer_id FOR UPDATE NOWAIT;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Clusula WHERE CURRENT OF
DECLARE CURSOR c1 IS SELECT salary FROM employees FOR UPDATE OF salary NOWAIT; BEGIN ... FOR emp_record IN c1 LOOP UPDATE ... WHERE CURRENT OF c1; ... END LOOP; COMMIT; END;
Ejemplo:
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Deteccin de Errores Predefinidosdel Servidor de Oracle
Referencia al nombre estndar de la rutina de manejo de excepciones
Excepciones predefinidas de ejemplo: NO_DATA_FOUND TOO_MANY_ROWS INVALID_CURSOR ZERO_DIVIDE DUP_VAL_ON_INDEX
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Deteccin de Errores Predefinidosdel Servidor de Oracle: Ejemplo
Sintaxis: BEGIN SELECT ... COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN statement1; statement2; WHEN TOO_MANY_ROWS THEN statement1; WHEN OTHERS THEN statement1; statement2; statement3; END;
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
DECLARE e_products_invalid EXCEPTION; PRAGMA EXCEPTION_INIT (
e_products_invalid, -2292); v_message VARCHAR2(50); BEGIN . . . EXCEPTION WHEN e_products_invalid THEN :g_message := 'Product ID
specified is not valid.'; . . . END;
Error No Predefinido
Detectar el error del servidor de Oracle nmero 2292, que es una violacin de la restriccin de integridad.
21
3
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Excepciones Definidas por el Usuario
Ejemplo: [DECLARE] e_amount_remaining EXCEPTION; . . . BEGIN . . . RAISE e_amount_remaining; . . . EXCEPTION WHEN e_amount_remaining THEN :g_message := 'There is still an amount
in stock.'; . . . END;
1
2
3
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Procedimiento RAISE_APPLICATION_ERROR
Sintaxis: Permite emitir mensajes de error definidos por el
usuario desde subprogramas almacenados Se llama slo desde un subprograma almacenado
de ejecucin
raise_application_error (error_number, message[, {TRUE | FALSE}]);
-
Copyright 2004, Oracle. Todos los Derechos Reservados.
Procedimiento RAISE_APPLICATION_ERROR
Se utiliza en dos lugares diferentes: Seccin Executable Seccin Exception
Devuelve condiciones de error al usuario de forma consistente con respecto a otros errores del servidor de Oracle
Revisin de PL/SQL Estructura en Bloque para Bloques PL/SQL Annimos Declaracin de Variables PL/SQL Declaracin de Variables con el Atributo %TYPE Creacin de un Registro PL/SQL Atributo %ROWTYPE Creacin de una Tabla PL/SQL Sentencias SELECT en PL/SQL Insercin de Datos Actualizacin de Datos Supresin de Datos Sentencias COMMIT y ROLLBACK Atributos de Cursor SQL Sentencias IF, THEN y ELSIF Bucle Bsico Bucle FOR Bucle WHILE Control de Cursores Explcitos Declaracin del Cursor Apertura del Cursor Recuperacin de Datos del Cursor Cierre del Cursor Atributos de Cursor Explcito Bucles FOR de Cursor Clusula FOR UPDATE Clusula WHERE CURRENT OF Deteccin de Errores Predefinidos del Servidor de Oracle Deteccin de Errores Predefinidos del Servidor de Oracle: Ejemplo Error No Predefinido Excepciones Definidas por el Usuario Procedimiento RAISE_APPLICATION_ERROR Pgina 32