viernes, 13 de septiembre de 2013

Oracle

Oracle tiene su propio dialecto de SQL, con sus particularidades y sus funciones especiales.

Devolver resultado como una lista

Si queremos utilizar un conjunto de registros o ids para una futura operaciones de conjuntos, por ejemplo condicionar que un valor esté dentro de una lista de valores, lo normal es calcular el conjunto a comparar en una subconsulta. Pero por diversas razones puede que queramos tener esa lista preparada o poder llevarla a otra BBDD.
Select id from tabla;

Nos devuelve un conjunto de registros, cada valor es una celda en un registro nuevo.
Select wm_concat(id) from tabla;

Nos devuelve un registro con una celda cuyo valor serían los valores separados por coma: id1, id2, id3, id4. Esta instrucción depende de la versión de la BBDD Oracle.

Mensajes por consola

Comando set serveroutput on; para activar la impresión de mensajes por la consola. dbms_output.put_line('Mensaje a mostrar'); para imprimir un mensaje. Los mensajes en un bloque PL/SQL se muestran por consola una vez finalizado dicho bloque. Ejemplo:

DECLARE
     idNuevoConcepto NUMBER;

   BEGIN
   dbms_output.put_line('Comienzo ejecución');
     idNuevoConcepto := 916;
     for reg in (Select idest from estadosfinancieros 
                 where fecha >= '1/1/2008') loop
       Insert into importes_estados_financieros
         (ief_id, ief_importe, ief_ef_id, ief_idest) values
         (imp_estados_financieros_s1.nextval,
         0, idNuevoConcepto, reg.idest);
     end loop;
   dbms_output.put_line('Finalizando');
   END;

Trucos con Notepad++

Notepad++ es una excelente herramienta de apoyo para tratar texto. Muy en línea con Ultraedit no sabría decir cual es mejor, yo estoy acostumbrado al camaleon. Dispone de muchas opciones, voy a comentar dos que particularmente me han sido muy útiles.

Comparar ficheros

Para comparar necesitamos instalar el plugin ComparePlugin . Abiertos dos ficheros enfrentados en dos vistas (botón derecha sobre la pestaña de un fichero, opción Mover a la otra vista), nos vamos al menú superior de Plugis → Compare → Compare. Cuando terminemos podemos limpiar los resultados de la comparación.


Expresiones regulares

Notepad++ es muy eficiente haciendo reemplazos. Si tenéis un fichero de varios megas en el que se tienen que hacer millares de sustituciones probad a comparar el notepad clásico de Windows y este.. o mejor utilizad directamente Notepad++. En la ventana de sustituciones (Control+H) hay varias opciones del Modo de búsqueda. Por defecto el modo normal sirve para la mayoría de sustituciones, pero hay ocasiones en puede ser muy útil sustituir reconociendo un patrón y construir la sustitución con otro patrón. Para ello marcamos la opción Expresión regular.

Mi caso práctico es para sustituir el patrón utilizado para parámetros de consultas SQL ( :P_PARAMETRO ) al patrón para parámetros de JasperReport ( ${P_PARAMETRO} ). De una forma rápida podemos convertir una consulta de JasperReport para ejecutarla en SQL Developer y viceversa.
Reemplazar $P{NOMBRE} o $P!{NOMBRE} por :NOMBRE
  Buscar: \$P[!]*\{([^ , \r\n)]*)\}
  Reemplazar: \:\1

Reemplazar :NOMBRE por $P{NOMBRE}
  Buscar: :([^ , \r\n)]*)   Reemplazar: \$P\{\1\}

Nota: Si se hacen los dos pasos y en el primero había parámetros con el símbolo !, estos quedarán sin este en la segunda conversión.
Nota 2: ¡Cuidado con copiar espacios de más sin querer con la expresión regular! Invalidaría la expresión.


Formatear código XML

En el menú Plugins → Plugin Manager → Show Plugin Manager buscamos el plugins TextFX Characters. Este plugin necesita la dll libTidy.dll para algunas opciones como formatear código. Esta dll se incluía en versiones anteriores de Notepadd++ pero no en las actuales. Para solucionarlo podemos descargar el zip de la versión 5.9 de Notepad++ en la página oficial. Abrir el zip y copiar la carpeta plugins/Config/tidy en nuestra instalación Notepad++\plugins\Config. Después de esto reiniciamos Notepad++ y en el menú TextFX → TextFX HTML Tidy tendremos más opciones. En About TextFX ya no dará error por no encontrar la dll. En Tidy:Reindent XML nos formateará el código XML.