Re: [Pgsql-ayuda] Fución para insertar en 2 tablas simultaneamente

From: "Ing(dot) Roberto Andrade Fonseca" <randrade(at)abl(dot)com(dot)mx>
To: Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>
Cc: pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Pgsql-ayuda] Fución para insertar en 2 tablas simultaneamente
Date: 2002-06-07 03:56:25
Message-ID: Pine.LNX.4.10.10206062252120.19424-100000@inter.interservice.com.mx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola:

On Thu, 6 Jun 2002, Sebastián Villalba wrote:

> Perdón por la pregunta quizás por demás básica. En una función en sql y
> almacenada, yo necesito hacer lo siguiente: Una tabla "usuarios" con
> clave primaria id_usuario (int2)(nombre_usuario, login y password), otra
> tabla "socios", clave primaria id_socio (int4) y un campo
> id_usuario(int2)(domicilio, telefono, etc. etc. etc.). Entonces yo
> necesito dar de alta un nuevo socio, para eso, primero tengo que agregar
> en 1 al id_usuario en "usuarios", poner el login y passord, y después en
> la tabla "socios" agregar en 1 el id_socio (que es diferente al
> id_usuario porque no todos los usuarios son socios), poner el id_usuario
> que figura en la tabla "usuarios" y llenar el resto de los campos de la
> tabla "socios".

Existe una función en Postgres que te devuelve el valor del entero que definiste como serial, siempre y cuando hayas hecho una inserción que implique la creación de un nuevo valor para esa llave:

Con DBI, se hace de la siguiente mamera, aunque tu interés está en la sentencia sql:

# Armamos la consulta para inserción.
# Primero los datos personales
$sql = "insert into persona
(nombre, apellidos, direccion, colonia, ciudad_municipio, cp, id_estado, telefono, fax, email, id_grado, id_institucion)
values ('$nombre', '$apellidos', '$direccion', '$colonia', '$ciudad', '$cp', '$id_estado', '$telefono', '$fax', '$email', $id_grado, $id_institucion)";
#print "$sql<p>";
# Insertamos
$rv= $dbh->do($sql);

# Luego los de dependencia y área
# Primero recuperamos el id_persona
$sql = "select currval('persona_id_persona_seq')";
#print "$sql<p>";
$sth = $dbh->prepare($sql);
$rv = $sth->execute;
($id_persona) = $sth->fetchrow_array;

# Lo pasamos como campo oculto
print hidden('id_persona',$id_persona);
...

Espero que te sirva y te quede claro.

Saludos,

Roberto Andrade Fonseca
randrade(at)abl(dot)com(dot)mx

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Felipe Fernandez 2002-06-07 06:43:10 [Pgsql-ayuda] windows y tcl
Previous Message Salvador Salazar (st-psi) 2002-06-06 23:05:23 Re: [Pgsql-ayuda] Fución para insertar en 2 tablas simultaneamente