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.
Un compendio de trucos y utilidades que facilitan la vida del desarrollador de Oracle Forms y Reports y en general de los programadores de PL/SQL.
jueves, 22 de diciembre de 2011
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.
Etiquetas:
ordenacion,
paginacion,
plsql
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.
Etiquetas:
bucle,
excepciones,
plsql
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.
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.
“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.
Etiquetas:
commit,
forms,
transacciones
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.
Suscribirse a:
Entradas (Atom)