Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/09/2008, 03:07
larios_tnt
 
Fecha de Ingreso: febrero-2008
Mensajes: 75
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: ayuda urgente: Introducir los valores de las FK

Os explico lo que quiero hacer:
  • Tengo una BBDD :) con unas 18 tablas y unas 22 relaciones.
  • Tengo unas 15 funciones que se encargan de insertar los valores en todas las tablas. Y, como las PK de la mayoría de las tablas son secuencias, había pensado usar el comando "current" para introducir de forma automática el valor de la FK en vez de intrdoducir como parámetro de entrada un "integer"...
El código es el siguiente (he cambiado las varaibles para simplificar las cosas). No os preocupéis de que tenga sentido o no, sólo intento buscar una forma de simplificar las cosas.

Cita:
/* Create Sequences */
CREATE SEQUENCE Id_A_seq;
CREATE SEQUENCE Id_B_seq;
/* Create Tables */
Create table Entidad_A
(
Id_A Integer NOT NULL Default nextval ('Id_A_seq'),
Dato_A Text,
primary key (Id_A)
) Without Oids;

Alter Table Entidad_A add UNIQUE (Id_A);

Create table Entidad_B
(
Id_B Integer NOT NULL Default nextval ('Id_B_seq') UNIQUE,
Id_A Integer NOT NULL Default nextval ('Id_A_seq'),
Dato_B Text,
primary key (Id_B,Id_A)
) Without Oids;
/* Create Foreign Keys */
Alter table Entidad_B add foreign key (Id_A) references Entidad_A (Id_A) on update cascade on delete cascade;
/* Create Procedures */
CREATE OR REPLACE FUNCTION anadir_A (Text) RETURNS void AS'
BEGIN
INSERT INTO Entidad_A (Dato_A) VALUES ($1);
END;
'LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION anadir_B (Text) RETURNS void AS'
DECLARE
aux INTEGER;
BEGIN
aux := currval ('Id_A_seq');
INSERT INTO Entidad_B (Id_A, Dato_B) VALUES (aux, $1);
END;
'LANGUAGE 'plpgsql';

Última edición por larios_tnt; 15/09/2008 a las 03:42