Datos personales

Estudiantes de la Universidad Tecnologica Fidel Velázquez inscritos en el tercer cuatrimestre(2011/2). En la area de Sistemas Informáticos

lunes, 8 de agosto de 2011

EXCEPCIONES


 En PL/SQL una advertencia o condición de error es llamada una excepción.
    Las excepciones se controlan dentro de su propio bloque.La estructura de bloque de una excepción se muestra a continuación.

DECLARE -- Declaraciones
BEGIN
  -- Ejecucion
EXCEPTION
  -- Excepcion
END; 
    Cuando ocurre un error, se ejecuta la porción del programa marcada por el bloque EXCEPTION, transfiriéndose el control a ese bloque de sentencias.
    El siguiente ejemplo muestra un bloque de excepciones que captura las excepciones NO_DATA_FOUND y ZERO_DIVIDE. Cualquier otra excepcion será capturada en el bloque WHEN OTHERS THEN.


DECLARE -- Declaraciones
BEGIN
  -- Ejecucion
EXCEPTION
WHEN NO_DATA_FOUND THEN
  -- Se ejecuta cuando ocurre una excepcion de tipo NO_DATA_FOUNDWHEN ZERO_DIVIDE THEN  -- Se ejecuta cuando ocurre una excepcion de tipo ZERO_DIVIDE

WHEN OTHERS THEN  -- Se ejecuta cuando ocurre una excepcion de un tipo no tratado
  -- en los bloques anteriores

END;  

    Como ya hemos dicho cuando ocurre un error, se ejecuta el bloque EXCEPTION, transfiriéndose el control a las sentencias del bloque. Una vez finalizada la ejecución del bloque de EXCEPTION no se continua ejecutando el bloque anterior.
    Si existe un bloque de excepcion apropiado para el tipo de excepción se ejecuta dicho bloque. Si no existe un bloque de control de excepciones adecuado al tipo de excepcion se ejecutará el bloque de excepcion WHEN OTHERS THEN (si existe!). WHEN OTHERS debe ser el último manejador de excepciones.
    Las excepciones pueden ser definidas en forma interna o implícitamente por el usuario. Ejemplos de excepciones definidas en forma interna son la división por cero y la falta de memoria en tiempo de ejecución. Estas mismas condiciones excepcionales tienen sus propio tipos y pueden ser referenciadas por ellos: ZERO_DIVIDE y STORAGE_ERROR.
    Las excepciones definidas por el usuario deben ser alcanzadas explícita mente utilizando la sentencia RAISE.
    Con las excepciones se pueden manejar los errores cómodamente sin necesidad de mantener múltiples chequeos por cada sentencia escrita. También provee claridad en el código ya que permite mantener las rutinas correspondientes al tratamiento de los errores de forma separada de la lógica.

CURSORES


 PL/SQL utiliza cursores para gestionar las instrucciones SELECT. Un cursor es un conjunto de registros devuelto por una instrucción SQL. Únicamente los cursores son fragmentos de memoria que reservados para procesar los resultados de una consulta SELECT.  
   Podemos distinguir dos tipos de cursores:
  • Cursores implicitos. Este tipo de cursores se utiliza para operaciones SELECT INTO. Se usan cuando la consulta devuelve un único registro.
  • Cursores explicitos. Son los cursores que son declarados y controlados por el programador. Se utilizan cuando la consulta devuelve un conjunto de registros. Ocasionalmente también se utilizan en consultas que devuelven un único registro por razones de eficiencia. Son más rápidos.
   Un cursor se define como cualquier otra variable de PL/SQL y debe nombrarse de acuerdo a los mismos convenios que cualquier otra variable. Los cursores implicitos no necesitan declaración.



 El siguiente ejemplo declara un cursor explicito:


declare 
  cursor c_paises is
  SELECT CO_PAIS, DESCRIPCION
  FROM PAISES;
begin/* Sentencias del bloque ...*/
end;
  Para procesar instrucciones SELECT que devuelvan más de una fila, son necesarios cursores explicitos combinados con un estructura de bloque.

   Un cursor admite el uso de parámetros. Los parámetros deben declararse junto con el cursor.
Los cursores implicitos se utilizan para realizar consultas SELECT que devuelven un único registro.
   Deben tenerse en cuenta los siguientes puntos cuando se utilizan cursores implicitos:
  • Con cada cursor implicito debe existir la palabra clave INTO.
  • Las variables que reciben los datos devueltos por el cursor tienen que contener el mismo tipo de dato que las columnas de la tabla.
  • Los cursores implicitos solo pueden devolver una única fila. En caso de que se devuelva más de una fila (o ninguna fila) se producirá una excepcion. No se preocupe si aún no sabe que es una excepcion, le valdrá conocer que es el medio por el que PL/SQL gestiona los errores.
   El siguiente ejemplo muestra un cursor implicito:


declare
vdescripcion VARCHAR2(50);
begin       SELECT DESCRIPCION 
       INTO vdescripcion
       from PAISES
       WHERE CO_PAIS = 'ESP';
       
       dbms_output.put_line('La lectura del cursor es: ' || vdescripcion);

end;
 

FUNCIONES


Una función es un subprograma que devuelve un valor.
    La sintaxis para construir funciones es la siguiente:

CREATE [OR REPLACE]
FUNCTION <fn_name>[(<param1> IN <type>, <param2> IN <type>, ...)] 
RETURN <return_type> 
IS
  result <return_type>;
BEGIN
 
  return(result);
[EXCEPTION]  -- Sentencias control de excepcion
END [<fn_name>];

   El uso de OR REPLACE permite sobreescribir una función existente. Si se omite, y la función existe, se producir, un error.
    La sintaxis de los parámetros es la misma que en los procedimientos almacenado, exceptuando que solo pueden ser de entrada.


 Las funciones pueden utilizarse en sentencias SQL de manipulación de datos (SELECT, UPDATE, INSERT y DELETE):

SELECT CO_PRODUCTO, 
       DESCRIPCION,
       fn_Obtener_Precio(CO_PRODUCTO)
FROM PRODUCTOS; 

BLOQUE ANONIMO


bloque anónimo, salvo porque se reemplaza la seccion DECLARE por la secuencia PROCEDURE ... IS en la especificación del procedimiento.
    Debemos especificar el tipo de datos de cada parámetro. Al especificar el tipo de dato del parámetro no debemos especificar la longitud del tipo.
    Los parametros pueden ser de entrada (IN), de salida (OUT) o de entrada salida (IN OUT). El valor por defecto es IN, y se toma ese valor en caso de que no especifiquemos nada.


CREATE OR REPLACE 
PROCEDURE Actualiza_Saldo(cuenta NUMBER, 
                          new_saldo NUMBER)
IS  -- Declaracion de variables locales
BEGIN
  -- Sentencias
  UPDATE SALDOS_CUENTAS 
	SET SALDO = new_saldo, 
            FX_ACTUALIZACION = SYSDATE
  WHERE CO_CUENTA = cuenta;
END Actualiza_Saldo; 

PROCEDIMIENTOS


Procedimientos almacenados
    Un procedimiento es un subprograma que ejecuta una acción especifica y que no devuelve ningún valor. Un procedimiento tiene un nombre, un conjunto de parámetros (opcional) y un bloque de código.

CREATE [OR REPLACE] 
PROCEDURE <procedure_name> [(<param1> [IN|OUT|IN OUT] <type>, 
                             <param2> [IN|OUT|IN OUT] <type>, ...)] 
IS  -- Declaracion de variables locales
BEGIN
  -- Sentencias[EXCEPTION]  -- Sentencias control de excepcionEND [<procedure_name>];

El uso de OR REPLACE permite sobreescribir un procedimiento existente. Si se omite, y el procedimiento existe, se producir, un error. 

COMANDOS DE LDD


Una vez creada una tabla puede ocurrir que se necesita una columna adicional o modificar una existente. Esta operación se realiza con el comando ALTER TABLE.
ALTER TABLE nombre-tabla {ADD|MODIFY} ({nombre-columna tipo columna [NOT NULL],});
Ej: Adicionar la columna Fecha_est a la tabla estudiante.
ALTER TABLE estudiante ADD (fecha_est date not null);
Se deben tener en cuenta las siguientes observaciones:
  • No es posible disminuir el tamaño de una columna
  • En las modificaciones, los tipos anterior y nuevos deben ser compatibles o la tabla estar vacía.
  • La opción ADD .... NOT NULL solo es posible sí la tabla esta vacía.
  • La opción MODIFY .... NOT NULL solo es posible si la tabla no tiene ningún NULL en la columna en cuestión.

Tambien es posible modificar una tabla añadiendo o eliminando restricciones. El Comando es el siguiente:
ALTER TABLE nombre-tabla {ADD|DROP} CONSTRAINT nombre-restriccion;
ELIMINACION DE TABLAS
EL comando para eliminar físicamente una tabla de la estructura de la base de datos es:
DROP TABLE nombre-tabla [CASCADE CONSTRAINTS]
INSERCION ACTUALIZADO Y BORRADO
Con la estructura de la tabla ya definida se pueden insertar los datos, modificarlos o borrarlos de la tabla. Esto se realiza con el lenguaje DML. Recuerde que todas estas sentencias requieren la orden commit para actualizar las tablas o rollback para deshacer los cambios efectuados

COMANDOS DE LMD


INSERCION
INSERT  INTO nombre-tabla [({nombre-columna(s),})] VALUES ({expresión,})
Ej: Ingresar la carrera con código 150
INSERT INTO carrera VALUES (150,'Ingenieria de Sistemas');
ACTUALIZACION
UPDATE nombre-tabla  SET {nombre-columna = expresión,} [WHERE condición];
Ej: Modificar el patrimonio del estudiante cuyo código es 98115310
UPDATE estudiante SET pat_est = 15000000 WHERE cod_est = 98115310;
BORRADO
DELETE FROM nombre-tabla [WHERE condición];
Ej: Eliminar el  estudiante cuyo código es 98115310
DELETE FROM estudiante  WHERE cod_est = 98115310;
Si se omite la opcion WHERE eliminara todas las filas de la tabla estudiante.