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