Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Otros Temas » Bases de Datos » DBD::ODBC last_insert_id  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 7 mensajes ] 
 
Nota 2011-07-14 05:52 @286

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
DBD::ODBC last_insert_id
Agradecería sí pusiesen indicarme cómo otener el último id insertado en una tabla.

El motor de base de datos es SQL Server 2000 y estoy usando DBD::ODBC. En MySQL he usado el método last_insert_id pero aquí NO existe. ¿¿Cómo puedo obtenerlo??

¡¡¡Muchas gracias, por la ayuda!!! :D


Nota 2011-07-14 07:06 @338
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: DBD::ODBC last_insert_id
Según la documentación del método last_insert_id() en el manual de DBI, con el MS SQL Server, sí que funciona, con tal de que en la última sentencia INSERT no se hayan utilizado placeholders, es decir, caracteres '?' que serán sustituidos por los valores que luego le pasamos en el execute().

Otra opción: sacarlo con esta sentencia: select @@identity

_________________
JF^D Perl programming


Nota 2011-07-15 11:17 @512

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: DBD::ODBC last_insert_id  RESUELTO
Muchas gracias, ¡¡¡este SQL Server es todo un tema!!!

last_insert_id() no funciona; lo probé de todas formas. Pero sí resultó select @@identity.

Una cosa para tener en cuenta para alguien que utilice este motor: no permite tener varios manejadores de sentencias activos por conexión. Hay que cerrarlas a todas, a medida que se utilizan ($sth->finish) . Hay que abrir varias conexiones a la base según cantidad de manejadores de sentencia se necesiten activos.

¡¡¡Muchas gracias!!!


Nota 2012-03-15 09:08 @422

Perlero Nuevo
Registrado: 2012-03-07 16:33 @731
Mensajes: 16
Re: DBD::ODBC last_insert_id
Hola Lord,

¿Puedes por favor ayudarme con esto? Tengo exactamente el mismo problema que tu tuviste: no sé cómo sacar el id. Anexo mi código.

$sql = 'insert into nivel (descripcion, usuario, nivel_vigencia, id) SELECT descripcion, usuario,nivel_vigencia,id FROM nivel where id_nivel=20
SELECT @@identity';
$sth = $dbh->prepare($sql);
$sth->execute();
$id = $dbh->last_insert_id(undef, undef, 'Nivel', 'id_nivel');
$templ->registro($id);

El insert lo hace bien, pero la variable $id al imprimirla no me retorna ningún valor.
¿¿Qué modificación tengo que hacer para capturar el valor??

Mil Gracias...


Nota 2012-03-15 10:04 @461
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: DBD::ODBC last_insert_id
Una de las limitaciones de select @@IDENTITY es que no funciona en la misma sentencia INSERT.

Deberás hacer un segundo prepare/execute para obtener el valor.

_________________
JF^D Perl programming


Nota 2012-03-15 12:39 @569

Perlero Frecuente
Registrado: 2005-04-28 05:47 @282
Mensajes: 188
Re: DBD::ODBC last_insert_id
Exacto. Como dice explorer:

Primero hacer el INSERT
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.   my $query1 = " INSERT INTO ........ " ;
  2.   my $sth1 = $dbh->prepare($query1) or die ("Error prepare: $query1" );
  3.   $sth1->execute()  or die ("Error prepare: $query1" );
  4.   $sth1->finish;
  5.  

Luego
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1.      my $query0 = ' SELECT  @@IDENTITY ';
  2.      my $sth0 = $dbh->prepare($query0) or die "Error al insertar con $query0";
  3.      $sth0->execute() or die "Error al insertar con $query0";
  4.      $id = $sth0->fetchrow_array();
  5.      $sth0->finish;
  6.  


Última edición por explorer el 2012-03-15 20:23 @891, editado 1 vez en total
Marcas de código Perl


Nota 2012-03-15 13:02 @585

Perlero Nuevo
Registrado: 2012-03-07 16:33 @731
Mensajes: 16
Re: DBD::ODBC last_insert_id
Muchas gracias por la respuesta, ya resolví :)


Responder al tema  [ 7 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO