10/9/10

PRAGMA EXCEPTION_INIT

PRAGMA EXCEPTION_INIT asocia un nombre de excepción con un número de error de Oracle. Con ello se puede interceptar cualquier error ORA- y escribir un controlador específico para él, en lugar de utilizar el controlador OTHERS.

Ejemplo
DECLARE
  deadlock_detected EXCEPTION;
  PRAGMA EXCEPTION_INIT(deadlock_detected, -60);
BEGIN
  NULL; -- Alguna operación que cause un error ORA-00060
EXCEPTION
  WHEN deadlock_detected THEN
    NULL; -- Aquí se trataría el error específico
END;

6/9/10

Estimación de tiempos en un proyecto

1.- Divida el proyecto en tareas.

2.- Enumere las tareas

3.- Decida el tiempo que tardaría en realizar una tarea si supiese exactamente el tiempo que tardaría en efectuarla. Posteriormente utilizaremos este tiempo como unidad de medida.


4.- Decida el riesgo de cada tarea según esta escala:
  • a) He realizado esta tarea y se exactamente como hacerla. Ni siquiera voy a consultar la sintaxis en un libro. No se requiere ninguna investigación.

  • b) He hecho esto antes pero no recuerdo exactamente como encajan las cosas. Seguramente tenga que buscar información.

  • c) He visto que se ha hecho previamente, probablemente “Ricardo” o “Laura” sepan como hacerlo.

  • d) Parece que toda la información esta disponible para resolver el problema, es decir, existe una solución. Sin embargo todavía no se como encontrar el cómo hacerlo.

  • e) No se como hacerlo pero lo voy a intentar.

  • f) Creo que es imposible hacerlo, pero no lo puedo demostrar aun.

5.- Ahora asigne valores a las letras (observar que son potencias de 2):
  • A=1
  • B=2
  • C=4
  • D=8
  • E = 16
  • F = 32
6.- Multiplique su unidad de estimación por el tiempo de cada letra asociada a la tarea. Obtendrá los tiempos medios para sus tareas.

7.- Sume los tiempos totales y tendrá la estimación del tiempo del proyecto.

Por último es interesante comprobar como variaría su tiempo si una tarea de nivel C pasase a nivel B y otra de nivel D pasase a un E. Esto habrá que simularlo con mayor número de elementos cuantas más tareas entren en juego, de esta manera podrá acotar un tiempo máximo y mínimo para el proyecto.

Fuente
Java. Sin errores
Will David Mitchell
Editorial McGraw-Hill

2/9/10

La papelera de reciclaje de Oracle10g: Recycle Bin

A partir de Oracle10g se incorpora esta nueva funcionalidad, denominada FLASHBACK DROP, que se viene a unir a las demás características que conforman el capítulo de las funcionalidades FLASHBACK. La idea es la misma que tienen algunos sistemas operativos con su papelera de reciclaje, es decir, disponer de una ubicación donde colocar los objetos borrados con el fin de poder recuperarlos después. Por supuesto, todo esto se hace de forma transparente para el usuario.

TOOL_ERR

Este paquete proporciona todos los mensajes de error que actualmente se encuentran en la pila de errores de PL/SQL. En el ejemplo de abajo muestra cómo se puede construir el manejador de excepción para mostrar varios mensajes.
BEGIN

....

EXCEPTION
WHEN OTHERS THEN
LOOP
EXIT WHEN TOOL_ERR.NERRORS = 0;
MESSAGE (TO_CHAR(TOOL_ERR.CODE) || ': ' || TOOL_ERR.MESSAGE);
TOOL_ERR.POP;
END LOOP;
END;

ORA-06502

ORA-06502: PL/SQL: error numérico o de valor (PL/SQL: numeric or value error string).
La causa suele ser un cálculo numérico, cadena, conversión o limitación se ha producido un error. Por ejemplo, este error se produce si se hace un intento de asignar el valor NULL a una variable declarada NOT NULL, o si se hace un intento de asignar un número entero mayor que 99 a una variable declarada NÚMERO (2).

Forms developer: Consulta de usuario en tiempo real

Muchas veces es necesario obtener la consulta de un bloque de datos de Oracle Forms, o realizar un EXECUTE_QUERY. El problema reside en que si el usuario ha hecho una consulta, es decir, metido condiciones en de búsqueda, y ejecutamos un EXECUTE_QUERY se pierden esas condiciones.
Para recuperar la última consulta realizada se ejecuta lo siguiente:
GET_BLOCK_PROPERTY(vBloque, LAST_QUERY);
Esta función nos devuelve un VARCHAR2 que consistente en una cadena que contiene la última consulta realizada, incluyendo las secciones de WHERE, ORDER BY, etc.

Detectar dinámicamente los nombres de columna en PL/SQL

El paquete SYS.DBMS_SQL puede ser utilizado para obtener los nombres de columna de una consulta SQL. En el siguiente bloque PL/SQL se detectan los nombre de columna y se imprimen por pantalla.