Las herramientas de línea de comandos de Firebird, parte 1: ISQL

Firebird dispone de varias herramientas de línea de comandos que nos pueden sacar de apuros en algún momento que no contemos con un programa de administración.


Firebird cuenta con unas aplicaciones de línea de comandos que nos pueden ser muy útiles en algunos casos, por ejemplo cuando no contamos con el apoyo de una aplicación de administración para Firebird -por ejemplo, IBConsole-.


Algunas tareas de administración se pueden hacer directamente con SQL, como lo es la creación de la base de datos, de tablas, procedimientos, triggers, y demás objetos de la base de datos. También se pueden dar permisos a los usuarios del servidor y crear roles para ayudar a la administración de los permisos. Existen otras tareas que no se pueden realizarse directamente con SQL, sino que deben ser ejecutadas a través de ciertas aplicaciones de línea de comando o mediante aplicaciones que accedan a la interfaz de servicios que se encuentra disponible en las versiones Super Server de Firebird.


En este caso particular se encuentran las tareas de respaldar o restaurar una base de datos, la administración de usuarios, la modificación de algunos parámetros de una base de datos o la corrección de errores, daños o corrupción de datos que pudiera haber tenido una base de datos en un caso extremo.


Las aplicaciones de línea de comando de Firebird son: ISQL, que permite enviar instrucciones SQL al servidor y realizar consultas; GBAK, que se utiliza para crear respaldos y restaurarlos nuevamente; GSEC que sirve para administrar los usuarios del servidor y GSTAT, que permite obtener estadísticas de una base de datos.


 


En esta primera entrega hablaré de ISQL, la aplicación de línea de comandos que permite ejecutar instrucciones SQL desde MS-DOS -en el caso del sistema operativo Windows- y desde una consola de sistema -para los sistemas basados en UNIX-.


 


ISQL


ISQL nos permite crear una base de datos o conectarnos a alguna ya existente, y poder enviar instrucciones SQL de manipulación de datos (como select, insert, update y delete) y de definición de datos (para crear, modificar y eliminar objetos de una base de datos de Firebird). De esta manera, con ISQL podemos crear tablas, insertar datos en las tablas, modificarlos, consultarlos y crear triggers, procedimientos, ver las tablas disponibles en la base de datos, y muchas cosas más. En fín, todo lo que se pueda hacer con SQL.


ISQL se encuentra disponible en las distintas plataformas sobre las que corre Firebird. En el caso de Linux, se encuentra en el directorio /opt/Firebird/bin, y en Windows se encuentra en el directorio c:\archivos de programa\Borland\Firebird\bin.


Una vez que ejecutamos ISQL, nos muestra la siguiente leyenda de bienvenida:


 


C:\Archivos de programa\Borland\Firebird\bin>isql


Use CONNECT or CREATE DATABASE to specify a database


SQL>


 


Y nos indica que debemos utilizar la instrucción CONNECT para conectarnos a una base de datos ya existente, o CREATE DATABASE para crear una nueva.


 


Creando una base de datos


 


Para crear una base de datos con ISQL, debemos utilizar la instrucción CREATE DATABASE. Esta instrucción tiene muchos parámetros para especificar por ejemplo, el tamaño de las páginas de datos, los archivos donde se creará la base de datos, el juego de caracteres por defecto a utilizar, y algunas cosas más, aunque la manera más fácil de crear una base de datos es especificando únicamente el nombre y ruta de la base de datos, y el nombre y contraseña del usuario que va a crearla. Por ejemplo:


 


SQL> create database “c:\datos\ejemplo.gdb” user “SYSDBA” password “masterkey”;


 


Con esta instrucción se creó una base de datos llamada ejemplo.gdb dentro de la carpeta c:\datos. En el caso de que ya exista la base de datos y deseemos conectarnos a ella, debemos utilizar la instrucción connect en lugar de create database. Nótese que se debe utilizar un punto y coma para indicar el fin de la instrucción. El punto y coma es el carácter terminador por defecto -el que indica que ya terminó la instrucción SQL y que debe ser enviada al servidor- aunque en algunos casos se deberá cambiar por otro, como veremos más adelante.


Ahora vamos a crear una tabla. Volvemos a la línea de comando de ISQL y escribimos el código para crear una tabla:


 


SQL> create table empleados(


CON> claveempleado integer not null,


CON> nombreempleado varchar(100),


CON> edad integer,


CON> fechaalta date,


CON> primary key(claveempleado));


 


Observamos que la instrucción SQL se puede prolongar por varias líneas, ya que ISQL enviará la instrucción al servidor hasta que se escriba el carácter terminador (que en este caso es el punto y coma).


Ahora tenemos que aplicar la transacción para que la tabla sea creada definitivamente. Para ello tecleamos la instrucción commit:


 


SQL> commit;


 


Para verificar que la tabla ya fue creada, utilizamos la instrucción de ISQL llamada show tables:


 


SQL> show tables;


EMPLEADOS


 


Usando DML


 


Ahora vamos a utilizar instrucciones DML de SQL. DML significa Lenguaje de Manipulación de Datos, es decir, son las instrucciones que nos permiten agregar, modificar, eliminar y consultar la información contenida en la base de datos.


En primer lugar, vamos a agregar un registro a la tabla de empleados. Utilizamos la instrucción insert de SQL de esta manera:


 


SQL> insert into empleados(claveempleado,nombreempleado,edad,fechaalta) values (1,’Juan


Pérez’,28,’01/01/2002′);


SQL> commit;


 


Y ya hemos ingresado un registro a la tabla empleados. Vamos a verificarlo:


 


SQL> select * from empleados;


CLAVEEMPLEADO NOMBREEMPLEADO


EDAD FECHAALTA


============= ==================================================================


============= ============ ===========


1 Juan Pérez


28 2002-01-01


SQL>


 


Como vemos, el formato de despliegue se distorsiona debido a que se realiza en 80 columnas. Por ello es mejor seleccionar únicamente las columnas que necesitemos consultar, ya que este problema se presentará siempre que no quepan las columnas en la pantalla.


Veamos ahora cómo crear triggers y procedimientos con ISQL.


 


Creando triggers y procedimientos


 


En artículos anteriores hablé de triggers y procedimientos y cómo crearlos. Entonces, ¿porqué volver a ese tema? La respuesta es que es un caso especial cuando se utiliza ISQL para manipular (crear, modificar, eliminar) triggers y procedimientos en una base de datos. Esto se debe a que -como se mencionó anteriormente-, ISQL utiliza el punto y coma como su terminador por defecto. Como sabemos, los caracteres de punto y coma se utilizan dentro de la definición de triggers y procedimientos para delimitar las instrucciones a ejecutarse dentro del trigger o procedimiento. Esto interfiere con el carácter terminador de ISQL, lo que puede dar lugar a errores. Por eso debemos de cambiar el carácter terminador de ISQL antes de crear o modificar triggers o procedimientos. Vamos a crear un trigger para la tabla empleados utilizada en el ejemplo.


En primer lugar, hay que cambiar el carácter terminador, esto se hace con la instrucción set term. En este caso utilizaremos el signo de admiración (!) como terminador.


 


SQL> set term !


 


A continuación ya podemos crear el trigger, utilizando de manera normal el punto y coma para separar las instrucciones dentro de él, pero finalizando la definición del trigger con el nuevo terminador, que en este caso es el signo de exclamación.


 


SQL> create trigger empleados_bi for empleados


CON> before insert


CON> as


CON> declare variable maxclave integer;


CON> begin


CON> select max(claveempleado) from empleados


CON> into :maxclave;


CON> new.claveempleado=:maxclave + 1;


CON> end!


SQL> commit!


 


¡Y listo!, se ha creado el trigger para la tabla empleados. Vamos a verificar que exista:


 


SQL> show triggers!


Table name Trigger name


=========== ============


EMPLEADOS EMPLEADOS_BI


SQL>


 


Nótese que mientras no se vuelva a cambiar el terminador a punto y coma, se deberá seguir utilizando el terminador especificado. Para volver a cambiar el terminador a punto y coma, ejecutamos:


 


SQL> set term ;!


 


Y ya podremos volver a utilizar el punto y coma como terminador.


 


Comandos de ISQL


 


ISQL cuenta con comandos que no pertenecen a SQL, pero son necesarios para consultar datos y ejecutar tareas. A continuación se muestra la lista de comandos exclusivos de ISQL y la función de cada uno.


 
























































































































Comando Función
BLOBDUMP <blobid> <file> Vacía un campo BLOB a un archivo
BLOBVIEW <blobid> Visualiza un campo BLOB en un editor de texto
EDIT [<filename>] Edita un archivo de scripts de SQL y lo ejecuta
EDIT Edita el buffer de comandos actual y lo ejecuta
HELP Despliega la ayuda de ISQL
INput <filename> Toma como entrada el archivo SQL especificado
OUTput [<filename>] Escribe la salida a un archivo


especificado

OUTput Regresa la salida a stdout
SET <option> Configura varias opciones de ISQL listadas a continuación
SET Despliega las configuraciones SET


actuales

SET AUTOddl Activa/desactiva el commit automático


para las instrucciones DDL (definición


de datos)

SET BLOB [ALL|<n>] Despliega los camplos BLOB de subtipo


<n> o todos

SET BLOB Desactiva el despliegue de campos BLOB
SET COUNT Activa/desactiva el conteo del total de registros en una instrucción select
SET ECHO Activa/desactiva el comando echo
SET LIST Cambia el formato de despliegue de


columnas a tablas

SET NAMES <csname> Configura el nombre del juego de


caracteres

SET PLAN Activa/desactiva el despliegue del plan


de consulta (query access plan)

SET SQL DIALECT <n> Configura el dialecto sql a utilizar
SET STATs Activa/desactiva el despliegue del las estadísticas de desempeño
SET TIME Activa/desactiva el despliegue de la


hora en campos de fecha (en dialecto 1)

SET TERM <string> Cambia el carácter terminador
SET WIDTH <col> [<n>] Cambia el ancho de despliegue para la


columna especificada

SHELL <command> Ejecuta un comando del sistema


operativo o sale momentáneamente a la


línea de comandos del sistema operativo

SHOW <object> [<name>] Despliega información sobre el sistema.


El parámetro object


<object> = CHECK, DATABASE, DOMAIN,


EXCEPTION, FILTER, FUNCTION,


GENERATOR,GRANT, INDEX, PROCEDURE,


ROLE, SQL DIALECT, SYSTEM, TABLE,


TRIGGER, VERSION, VIEW

EXIT Termina ISQL y hace aplica la


transacción activa

QUIT Termina ISQL y cancela la transacción


Activa

Todos los comandos pueden ser abreviados utilizando las letras especificadas en mayúsculas

 



Conclusiones


 


ISQL es una herramienta muy básica y a muchos desarolladores les parecerá antigua u obsoleta. Sin embargo, es muy valiosa ya que se distribuye en la mayoría de las instalaciones para las distintas plataformas sobre las que se puede instalar Firebird. Tambien es muy útil cuando deseamos administrar remotamente un servidor Firebird que se encuentre bajo un sistema operativo de tipo UNIX (Linux, FreeBSD,SCO) utilizando telnet o ssh para conectarnos. En mi opinión, es una herramienta que debe ser dominada por todo administrador de Firebird, debido a que podemos necesitarla en algún momento en que no contemos con una aplicación de administración gráfica.