SET AUTODDL ON

3 comentarios

Las siglas DDL significan: Data Definition Language o en castellano: Lenguaje para la Definición de Datos.

Entonces, al escribir el comando SET AUTODDL ON le estamos indicando al Firebird que queremos que realice un COMMIT automático a continuación de cada instrucción DDL.

¿Cuáles son las instrucciones DDL?

Todas las que empiezan con las palabras: CREATE, ALTER, DROP, DECLARE, RECREATE, SET

Sirven para crear tablas, índices, stored procedure, triggers, etc. También para realizar modificaciones, borrados, declaraciones.

Ejemplos: CREATE TABLE, CREATE INDEX, ALTER TABLE, DROP INDEX

¿Cuál es la ventaja de escribir SET AUTODDL ON?

Que no necesitaremos escribir un COMMIT a continuación de las instrucciones DDL

¿Dónde se usa SET DDL ON?

En el programa ISQL.EXE, en los scripts, y en algunos otros programas que implementan esta funcionalidad.

Ejemplo:

Queremos agregarle la tabla BANCOS a nuestra Base de Datos mediante un script:

/* Al poner AUTODDL en ON no necesitamos escribir los COMMIT */

SET AUTODDL ON;

/* Primero, creamos la tabla BANCOS, sin un COMMIT al final del CREATE */

CREATE TABLE BANCOS (
   BAN_IDENTI D_IDENTIFICADOR DEFAULT 0 NOT NULL,
   BAN_NOMBRE D_NOMBRE40 NOT NULL);

/* Después, creamos las restricciones Primary Key y Unique Key, sin COMMIT */

ALTER TABLE BANCOS ADD CONSTRAINT PK_BANCOS PRIMARY KEY (BAN_IDENTI);

ALTER TABLE BANCOS ADD CONSTRAINT UQ_BANCOS UNIQUE (BAN_NOMBRE);

/* A continuación creamos un trigger para tener un identificador que sea autoincremental */

SET TERM ^ ;

CREATE TRIGGER BI_BANCOS_BAN_IDENTI FOR BANCOS
   ACTIVE BEFORE INSERT
   POSITION 0
AS
BEGIN
   IF (NEW.BAN_IDENTI IS NULL OR NEW.BAN_IDENTI = 0) THEN
      NEW.BAN_IDENTI = GEN_ID(BANCOS_BAN_IDENTI_GEN, 1);
END^

SET TERM ; ^

Como puedes ver, ningún COMMIT ha sido escrito sin embargo la tabla BANCOS ha sido creada exitosamente, como también las dos restricciones y el trigger.

¿Por qué? Porque al estar AUTODDL en ON es el propio Firebird quien se encarga de poner el COMMIT luego de cada instrucción DDL.

Artículo relacionado:

El índice del blog Firebird21

Un truco para encontrar valores que pueden estar en varias columnas

1 comentario

En este artículo hemos visto como usar las columnas computadas:

https://firebird21.wordpress.com/2013/06/23/columnas-computadas/

Ahora, aprovechándonos de ellas mostraremos un truco muy útil cuando el valor buscado puede encontrarse en varias columnas.

Por ejemplo, en nuestra tabla de CLIENTES tenemos estas columnas:

CLI_TELPAR     /* Teléfono particular */
CLI_TELLAB     /* Teléfono laboral */
CLI_CELULA     /* Teléfono celular o móvil */

Y queremos buscar un número de teléfono pero éste puede ser particular, laboral, o celular, entonces podríamos tener esta columna computada:

CLI_TELEFO COMPUTED BY (CLI_TELPAR || ' ' || CLI_TELLAB || ' ' || CLI_CELULA)

Entonces, para buscar a un cliente del cual conocemos su número de teléfono escribiríamos:

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_TELEFO LIKE '%123456%'

En donde evidentemente ‘123456’ es el número de teléfono que estamos buscando.

La contra de este truco es que no puede usar índices así que en tablas muy grandes no será práctico, pero en tablas no muy grandes no debería tardar más de 2 ó 3 segundos.

Artículos relacionados:

Columnas computadas

Utilizando columnas computadas

Algunos ejemplos de uso de las columnas computadas

Usando un SELECT en una columna computada

Indexando una columna computada

El índice del blog Firebird21

El foro del blog Firebird21