Joac escribió:
CREATE TABLE salida
(
salcod serial NOT NULL,
  entpar numeric(10) NOT NULL,
salfec date NOT NULL,
  salcan numeric(4) NOT NULL,
CONSTRAINT salida_pk PRIMARY KEY (salcod)
)
WITH (
OIDS=FALSE
);

Yo he tomado tu script y lo ejecute según la definición de arriba, prácticamente hace lo mismo que tu tienes, he quitado nada más una llave foránea hacia otra tabla y la creación de la secuencia, porque está implícito en la creación de los campos serial. En otras palabras, ejecutando ese script se crea también la secuencia y lo más importante es que al campo "salcod" se lo asigna como valor default, si te fijas en los catálogos o usando el pgAdmin ese campo tiene como valor default lo siguiente: "nextval('salida_salcod_seq'::regclass)"



A lo que me refiero es a que quites ese valor default del campo "salcod" para que el trigger cuando de error no utilice un valor de la secuencia.

así: ALTER TABLE salida ALTER COLUMN salcod DROP DEFAULT;


Y que el valor del campo "salcod", tú se lo asignes hasta que tu trigger válide todo lo que tenga que validar; asi:
NEW.salcod=nextval('salida_salcod_seq'::regclass);



--
Cordialmente,
Juan Ramírez
El Salvador
--
TIP 7: no olvides aumentar la configuración del "free space map"

Responder a