insertar tuplas en firebird

Sergio Gómez sergio en s3r.com.ar
Lun Jul 18 19:44:39 CEST 2005


Berna López wrote:
> Lo siento, pero no acabo de enternder o no me funciona, el Trigger es el
> siguiente
> 
> T$_COD_FAMILIA   de tipo:  Before Insert
> 
> as
> begin
>     if (new."COD_FAMILIA" is null) then
>     begin
>         new."COD_FAMILIA"= gen_id("G$_COD_FAMILIA",1);
>     end
> end
> 
> la tabla creada es la siguiente:
> 
> 
> /* Table: FAMILIA, Owner: BERNA */
> CREATE TABLE "FAMILIA"
> (
>   "COD_FAMILIA" INTEGER NOT NULL,
>   "ACRONIMO" CHAR(3) CHARACTER SET WIN1252 NOT NULL,
>   "NOM_FAMILIA" VARCHAR(30) CHARACTER SET WIN1252 NOT NULL,
>  PRIMARY KEY ("COD_FAMILIA")
> );
> 
> por tanto la consulta seria:
> 
> insert into FAMILIA values (",'aaa','abcdefghijkl')
> 
> pero la clave principal me da problemas, alguien sabria decirme que valor
> tengo q poner aqui
> 
> Ah, perdon si es muy larga mi consulta. Gracias

Dado tu ejemplo, la sentencia seria:

insert into FAMILIA values (null,'aaa','abcdefghijkl');

pero yo te recomiendo que siempre agregues la lista de columnas que
queres agregarle valores, entonces quedaria:

insert into FAMILIA (COD_FAMILIA, ACRONIMO, NOM_FAMILIA) values
(null,'aaa','abcdefghijkl');

Ahora dos cosas:
* 1ro Fijate que el null es para COD_FAMILIA que es donde la primera
condicion dentro del trigge es verdadera y el generador te devuelve el
valor adecuado. Esto quiere decir, que si modificas la primer linea del
cuerpo del trigger, como por ejemplo a 'if (:new.COD_FAMILIIA = 0) then'
significa que la sentencia adecuada para insertar una tupla es:

insert into FAMILIA (COD_FAMILIA, ACRONIMO, NOM_FAMILIA) values
(0,'aaa','abcdefghijkl');

* 2do Te conviene siempre agregar la lista de nombres de columnas en una
sentencia insert, ya que sino agregas los valores por orden en que
fueron definidas las columnas. Y al hacer:

insert into FAMILIA values ('aaa','abcdefghijkl');

el servidor pensara que 'aaa' es un valor para COD_FAMILIA, no para
acronimo, y como son distintos tipos te dara un error.
Por eso, si usas esta sentencia:

insert into FAMILIA (ACRONIMO, NOM_FAMILIA) values ('aaa','abcdefghijkl');

'aaa' no es en valor para COD_FAMILIA (como en el ejemplo anterior) sino
 que si es para ACRONIMO y ademas el valor de COD_FAMILIA llegara como null.

Espero con esto no haberte confundido mas aun. queria darte un panorama
mas conceptual.

Saludos,

-- 
Sergio Gómez - S3R

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es