Consultas SQL en Excel o CSV
Este formulario permite definir consultas SQL para exportar datos en
Excel o en formato CSV.
Pulsando el botón 'realizar' aparecerá un diálogo con los parámetros
definidos en la consulta, y al pulsar 'aceptar'
en dicho diálogo se podrá guardar el
resultado de la consulta en un fichero Excel o CSV.
Campo fichero
Se debe indicar un nombre de fichero sin extensión que se usará por
defecto para guardar el resultado de la consulta en Excel o CSV.
Campo descripción (opcional)
En este campo se puede escribir un texto de ayuda para los usuarios
de la consulta.
Sentencia SQL
En este campo hay que introducir la sentencia SQL o el código
BD4 script.
Tabla de usuarios con permiso
Para que un usuario no administrador (que no sea DBA ni ADMIN) pueda
ejecutar la consulta deberá estar registrado en esta tabla.
Tabla de parámetros
En esta tabla hay que definir los parámetros de la consulta.
Con estos parámetros se generará un diálogo que permitirá su introducción.
En cada parámetro hay que indicar lo siguiente:
- Número, que debe coincidir con el de la consulta SQL.
- Nombre, tal como aparecerá en el diálogo.
- Tipo: cadena, entero, decimal, fecha, hora o booleano
- Tamaño del campo que aparecerá en el diálogo.
- Permitir nulos: si no está seleccionado no se podrá dejar
en blanco.
- Valor por defecto, que contendrá el valor introducido
en la última ejecución de la consulta.
Tabla de columnas
En esta tabla se definen las columnas del fichero Excel o CSV
resultante. Si en la próxima ejecución de la consulta esta tabla está
vacía, se calculará automáticamente.
En cada columna hay que indicar lo siguiente:
- Número, que define el orden de las columnas en el
fichero Excel o CSV.
- Nombre de la columna que aparecerá en el Excel o CSV.
Si ha sido generado automaticamente se corresponderá con el
de la sentencia SQL.
- Tipo: cadena, entero, decimal, fecha, hora, booleano
o script.
- Columna de la sentencia: índice de la columna de la
consulta SQL. Se podrá dejar en blanco si el resultado debe
tener un valor constante (valor por defecto) o nulo, o también
si el tipo es script.
- Valor por defecto:
- Si el tipo de la columna no es script, en caso de
que el resultado de la consulta SQL sea nulo, se usará el
valor introducido en este campo.
- Si el tipo de la columna es script su valor deberá
ser el nombre de una función del script.
Importación y exportación de consultas SQL
El menú del formulario permite importar
y exportar las definiciones de las consultas SQL. Estas utilidades están
pensadas sólo para copiar las consultas entre diferentes bases de datos.
El fichero que genera la exportación no se debe archivar puesto que
puede ser incompatible en futuras versiones, es decir, es posible que no
se pueda importar una consulta SQL exportada desde una versión anterior.
BD4 ® script
BD4 script es un lenguaje muy parecido a JavaScript que permite
interactuar con Java. Al ser casi idéntico a JavaScript se puede usar
cualquier editor que soporte este lenguaje.
Estas son algunas de las carácterísticas de BD4 script:
- Se pueden invocar funciones definidas en BD4 script desde Java,
y también, a la inversa.
- En la clase que permite ejecutar scripts se puede definir qué
objetos será posible crear y obtener.
- El operador '==' equivale a la función 'equals' de Java, por tanto,
hay que usar '==' y '!=' en lugar de '===' y '!==', que no están
permitidos.
- Todas las sentencias deben terminar con punto y coma.
- Las funciones sólo se pueden definir mediante sentencias en el
programa principal, por lo que una función no se puede asignar
a una variable.
- Sólo se pueden usar variables y constantes que se hayan declarado
previamente.
- En las funciones se puede acceder a las variables y constantes
definidas en el programa principal, y éstas son las únicas que
se pueden redefinir dentro de las funciones.
- Una variable definida en un ámbito no se puede redefinir en otro
ámbito anidado (bloque entre llaves).
- Las variables no inicializadas contendrán el valor 'null'.
No existe el valor 'undefined'.
- Soporta por defecto variables de tipo entero (32 bits), cadena y
booleano, y además todos los tipos que provengan de objetos Java.
- Los arrays y las tablas hash se usan mediante objetos de Java,
y además se puede usar el operador corchete para acceder a sus
elementos.
- Un script se podría considerar como una clase en la que su estado
interno se guarda en las variables del programa principal y su
interfaz está definido por las funciones.
Funciones especiales que se pueden definir en el script
En los scripts se pueden definir todas las funciones que sean
necesarias, pero las siguientes funciones son "especiales" porque
si se definen son llamadas para la realización de la consulta:
- queryGetSQL: Debe devolver la consulta SQL.
Es necesario definir esta función para que el texto de la consulta
sea considerado un script.
- querySetParameters: Será necesario definir esta función
en caso de que los parámetros definidos en el formulario no coincidan
con los de la sentencia SQL. Los parámetros se indicarán mediante
la función setParameter.
- queryHasNext: Esta función es opcional.
Debe devolver 'true' si hay datos disponibles.
- queryNext: Esta función es opcional.
Debe preparar la siguiente fila de datos si quedan datos disponibles.
- Las funciones queryHasNext y queryNext se definen
conjuntamente, es decir, o las dos o ninguna. Sólo es necesario
definirlas cuando las filas del resultado de la consulta no se
correspondan con las que haya que escribir en el fichero Excel o
CSV debido a que, por ejemplo, haya que hacer algún resumen.
Funciones que se pueden llamar desde el script
En los scripts se pueden llamar a las funciones de los objetos y
además a las siguientes funciones especiales:
- getConnection: Devuelve la conexión de la base de datos.
Esta función no acepta parámetros.
- getParameter: Devuelve el valor de un parámetro del
diálogo.
Esta función acepta como parámetro el índice (entero)
del parámetro a obtener.
- setParameter: Modifica el valor de un parámetro de la
sentencia SQL.
Esta función acepta los parámetros índice (entero)
y valor del parámetro.
- getObject: Devuelve un objeto del resultado de la consulta.
Esta función acepta como parámetro el nombre de la columna
de la sentencia SQL.
- getString: Devuelve una cadena del resultado de la consulta
con un tamaño máximo.
Esta función acepta como parámetros el nombre de la columna
de la sentencia SQL y el tamaño máximo (entero) de la cadena.
- hasNext: Devuelve
true
si hay una fila
disponible en el resultado de la sentencia SQL.
Esta función no acepta parámetros.
- next: Prepara la siguiente fila del resultado de la
sentencia SQL.
Esta función no acepta parámetros.
También es posible crear algunos objetos de Java mediante
el operador new
:
- StringBuilder: Crea una secuencia de caracteres mutable.
- Integer: Crea un entero a partir de una cadena.
- BigDecimal: Crea un número decimal a partir de una cadena.
- Array: Crea un array de objetos o una matriz de 2 ó
3 dimensiones dependiendo si se indica entre 1 y 3 dimensiones
(números enteros). Por ejemplo, 'new Array(3,4)' crearía una
matriz de 3 filas y 4 columnas.
- ArrayList: Crea un array dinámico. Se puede indicar
la secuencia de objetos "inicial" que contendrá el array
como parámetros.
- HashMap: Crea una tabla hash.
- LinkedHashMap: Crea una tabla hash que mantiene una lista
enlazada entre los elementos para que el orden de iteración
sea predecible.
- TreeMap: Crea un objeto parecido a una tabla hash pero
con las claves ordenadas usando un árbol rojo-negro.
- HashSet: Crea un conjunto implementado con una tabla hash.
- LinkedHashSet: Crea un conjunto que mantiene una lista
enlazada entre los elementos para que el orden de iteración
sea predecible.
- Error: Crea un objeto 'RuntimeException'. Opcionalmente
se puede indicar una cadena con la descripción del error.
Sentencias de control
Se permiten las siguientes sentencias de control:
- while (condición)
- for (inicialización; condición; autoincremento)
- continue: para comenzar la siguiente iteración del bucle.
- break: para interrumpir un bucle o una cláusula 'case'.
- if: como en Java.
- Operador ternario: condición ? valor_cierto : valor_falso;
- switch: como en Java.
Constantes predefinidas
- Math: Se corresponde con 'java.lang.Math'.
- RoundingMode: Se corresponde con 'java.math.RoundingMode'.
- Arrays: Se corresponde con 'java.util.Arrays'.
- Collections: Se corresponde con 'java.util.Collections'.
Manejo de excepciones
Las excepciones se pueden lanzar con la palabra reservada 'throw' y
se manejan con los bloques 'try', 'catch' y 'finally', como en Java.
Si no se captura una excepción el script terminará su ejecución.
Por ejemplo:
try
{
throw "prueba";
}
catch(e)
{
print("Error: "+ e.getMessage());
}
finally
{
print("finally");
}
El ejemplo anterior imprimiría:
Error: prueba
finally
Más ejemplos de código
Operador ternario:
function fibonacci(n)
{
return n==0 ? 0 : n==1 ? 1 : fibonacci(n-1) + fibonacci(n-2);
}
Array:
function fibonacci(n)
{
var a = new Array(n + 1);
a[0] = 0;
a[1] = 1;
for(var i = 2; i <= n; i++)
a[i] = a[i-2] + a[i-1];
return a[n];
}
ArrayList:
function fibonacci(n)
{
var a = new ArrayList(0, 1);
for(var i = a.size(); i <= n; i++)
a[i] = a[i-2] + a[i-1];
return a[n];
}
BigDecimal:
function testDecimal()
{
var n = new BigDecimal("100"),
d = new BigDecimal("3"),
r = RoundingMode.HALF_UP;
if(n.divide(d, 2, r) != new BigDecimal("33.33"))
throw "ERROR!!";
}
Temas relacionados:
Anterior / Siguiente