Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/08/2010, 18:15
Avatar de xdrtas
xdrtas
 
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 16 años, 5 meses
Puntos: 13
Respuesta: Saber el proximo ID a insertar

Hola germana,
Cita:
Iniciado por germana Ver Mensaje
Saludos!!

Lo que necesito es aparentemente simple: saber el proximo id que se insertara en una tabla cuyo campo ID se auto incrementa, por lo que tengo esto:

Código:
   $res           = pg_query("SELECT nextval('nomina_temporal_id_seq') as id");
   $row           = pg_fetch_array($res, 0);
   $nomina_tmp_id = trim($row["id"]);
Pero, esto por ejemplo, selecciona el ID "90" y el id que se inserta en la tabla es 91 ( este codigo lo ejecuta antes del INSERT)

Lo otro que se me ocurre es hacer un select del ultimo registro insertado - despues de INSERT ¿?

alguna idea mejor?
GRACIAS
  1. No uses nextval tan arbitrariamente, esta función incrementa el valor de la secuencia siempre que lo uses, incluido en una sentencia SELECT como lo pones en tu ejemplo.
  2. Podrías usar la siguiente consulta "SELECT currval('secuencia') + 1 as id;. Currval -> "Return the value most recently obtained by nextval for this sequence in the current session", que significa: "Devuelve el valor más reciente obtenido por nextval para la secuencia usada en la sesión actual".
  3. Te dejo el link que explica como se usan nextval, currval, setval y lastval: http://www.postgresql.org/docs/8.4/s...-sequence.html

Te pongo un ejemplo con una tabla que tengo con 23 registros, usando lastval y currval, verás que obtengo los mismos resultados:
Código SQL:
Ver original
  1. SELECT lastval()+1 AS id;
  2.  id
  3. ----
  4.  24
  5. (1 fila)
  6.  
  7.  
  8. SELECT currval('ajax_id_seq') + 1 AS id;
  9.  id
  10. ----
  11.  24
  12. (1 fila)
24 es el siguiente valor de la secuencia, o sea, que el siguiente registro tendrá como ID el valor de 24.

Te recomiendo que tengas mucho cuidado a la hora de hacer este tipo de comprobaciones, recuerda que en una aplicación web varias personas pueden insertar, actualizar y borrar datos al mismo tiempo.

También puedes hacer lo que dices tú, hacer un select del último registro insertado.

Un cordial saludo.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]