[Pgsql-ayuda] Fución para insertar en 2 tablas
simultaneamente
Ing. Roberto Andrade Fonseca
randrade@abl.com.mx
Thu, 6 Jun 2002 22:56:25 -0500 (CDT)
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 e=
n
> 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@abl.com.mx