• Publicidad

DBD::ODBC last_insert_id

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

DBD::ODBC last_insert_id

Notapor Lor » 2011-07-14 05:52 @286

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
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Publicidad

Re: DBD::ODBC last_insert_id

Notapor explorer » 2011-07-14 07:06 @338

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: DBD::ODBC last_insert_id

Notapor Lor » 2011-07-15 11:17 @512

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!!!
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Re: DBD::ODBC last_insert_id

Notapor dolisguilarte » 2012-03-15 09:08 @422

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...
dolisguilarte
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2012-03-07 16:33 @731

Re: DBD::ODBC last_insert_id

Notapor explorer » 2012-03-15 10:04 @461

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: DBD::ODBC last_insert_id

Notapor Lor » 2012-03-15 12:39 @569

Exacto. Como dice explorer:

Primero hacer el INSERT
Sintáxis: [ Descargar ] [ Ocultar ]
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.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Luego
Sintáxis: [ Descargar ] [ Ocultar ]
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.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2012-03-15 20:23 @891, editado 1 vez en total
Razón: Marcas de código Perl
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Re: DBD::ODBC last_insert_id

Notapor dolisguilarte » 2012-03-15 13:02 @585

Muchas gracias por la respuesta, ya resolví :)
dolisguilarte
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2012-03-07 16:33 @731


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados