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.