jueves, 22 de diciembre de 2011

Alertas de más de 255 caracteres

A veces he tenido la necesidad de presentar mensajes más largos que los 255 caracteres que nos permiten las alertas de Oracle Forms. Por ello hoy os voy a presentar una función, que con la ayuda de un formulario, podréis visualizar alertas con mensajes de hasta 4000 caracteres.

martes, 22 de noviembre de 2011

Cursores con actualización óptima de filas sin bloqueos

En la entrada de hoy hablaré sobre un truco mediante el cual podremos actualizar los campos obtenidos de un cursor, de manera óptima, sin necesidad de bloquear las filas de las tablas referenciadas por el cursor.

sábado, 12 de noviembre de 2011

Consultas SQL con datos ordenados y paginación de resultados

Hoy voy a hablar de una cuestión que es aparentemente sencillo de afrontar pero que puede llegar darnos muchos quebraderos de cabeza.

Supongamos que queremos obtener el identificador de departamento y nombre de la tabla de departamentos ordenados por el nombre de manera descendente. La sentencia SQL sería algo así:
SQL> SELECT department_id, department_name 
  2  FROM DEPARTMENTS
  3  ORDER BY department_name DESC; 
 
DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
          120 Treasury
           50 Shipping
          150 Shareholder Services
           80 Sales
          250 Retail Sales
          260 Recruiting
           30 Purchasing
           70 Public Relations
          270 Payroll
          200 Operations
          220 NOC

DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
           20 Marketing
          170 Manufacturing
          210 IT Support
          230 IT Helpdesk
           60 IT
           40 Human Resources
          240 Government Sales
          100 Finance
           90 Executive
          130 Corporate Tax
          140 Control And Credit

DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
          190 Contracting
          180 Construction
          160 Benefits
           10 Administration
          110 Accounting

27 filas seleccionadas. 

jueves, 10 de noviembre de 2011

Envío de emails con ficheros adjuntos

Es posible que sepáis que desde hace bastante tiempo, concretamente desde la versión 8.1.7, Oracle nos brinda la posibilidad de hacer envíos de emails desde la base de datos gracias al paquete UTL_SMPT. En él tenemos implementadas las funcionalidades necesarias para establecer una conversación entre el servidor de base de datos y un servidor de correo SMTP que tengamos accesible.

No obstante, la implementación del protocolo de conversación requiere conocer bastante al detalle cómo funciona SMTP; por ello Oracle incluyó en sus distribuciones un paquete de demostración llamado DEMO_MAIL que nos facilitaba bastante las cosas. Más adelante, desde la versión 10g, tenemos a nuestra disposición el paquete UTL_MAIL que es aún nos lo pone más fácil.

Sin embargo, ninguna de estas implementaciones permite enviar un email de manera sencilla para el caso de emails con adjuntos, de manera que sólo haya que indicar el nombre del fichero y ocasionalmente su tipo mime; en la implementación que os presento es así, pero no hay que olvidar que el fichero debe estar almacenado en el propio servidor de base de datos.

domingo, 30 de octubre de 2011

Simulación de la sentencia continue en PL/SQL

En ocasiones se nos da la circunstancia de que dentro de bucle nos pude interesar ejecutar cierta parte del código siempre que se cumpla una condición, no haciendo nada más en esa iteración en caso contrario. Lo normal sería hacerlo más o menos así (en todos estos suspuestos se sobreentiende que tenemos al menos una condición de salida para el bucle):

(...)
LOOP
    (...)
    IF test THEN
        -- Código a ejecutar
        (...)
    END IF;
END LOOP;

(...)


La cosa se complica si tenemos varios de esos tests:

(...)
LOOP
    (...)
    IF test1 THEN
        -- Código a ejecutar test1
        (...)

        IF test2 THEN
            -- Código a ejecutar test2
            (...)
        END IF;

        (...)
    END IF;
END LOOP;
(...)


De aquí se puede llegar a la conclusión de que si son muchas las condiciones a comprobar, el programa puede llegar a ser bastante ilegible puesto que se hacen muchos anidamientos de sentencias IF.

viernes, 21 de octubre de 2011

Insertar imágenes en Oracle Reports

Existen varias maneras de incluir imágenes en nuestros reports. En este artículo os hablaré de algunas de esas  posibilidades.

La primera consiste en incrustar directamente la imagen. Para ello nos vamos al diseño del informe y desde el menú Insertar → Imagen seleccionamos la imagen que deseemos. Esta manera es la más sencilla, pero tiene dos inconvenientes, sobre todo si utilizamos una misma imagen (como un logotipo) en muchos reports diferentes: el tamaño del fichero del report aumenta puesto que la imagen va incrustada, y si en un momento dado hubiera que sustituir la imagen por otra habría que modificar los reports uno a uno.

viernes, 14 de octubre de 2011

Commit sin validación previa

He aquí lo que dice Oracle sobre la instrucción COMMIT cuando se ejecuta en un formulario de Forms:
“Causes Oracle Forms to update data in the database to match data in the form. Oracle Forms  first validates the form, then, for each block in the form, deletes, inserts, and updates to the database, and performs a database commit. As a result of the database commit, the database releases all row and table locks.”
Finalmente advierte lo siguiente:
“If you use a PL/SQL COMMIT statement in an anonymous block or a form-level procedure, Oracle Forms interprets that statement as a call to the COMMIT_FORM built-in”. Resumiendo, no es posible hacer un COMMIT sin evitar la validación de los datos modificados en los bloques.

domingo, 2 de octubre de 2011

Cómo crear en Forms un canvas tabular con scrollbar vertical y horizontal

Hola a todos y bienvenidos a este espacio web en el cual pretendo compartir con la comunidad mis conocimientos sobre PL/SQL, Oracle Forms y Reports fruto de 10 años de experiencia con estas herramientas.

Mi intención no es más que dar a conocer ciertos trucos o técnicas que pueden servir de gran ayuda sobre todo a los que lleváis poco tiempo trabajando con ellas, aunque en ocasiones es posible que resulte interesante a los más expertos. En cualquier caso, espero que os sea de utilidad.


Hoy voy a empezar explicando cómo se le puede poner a un canvas tabular barras de desplazamiento horizontales y verticales al mismo tiempo. Algo tan aparentemente trivial no lo es en Forms, puesto que en principio es posible hacerlo de manera sencilla, pero luego no funciona como es de esperar.