Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2013, 09:01
tomasafonso
 
Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Problema con campo serial y %rowtype en funcion plpgsql

Hola a todos.

Imaginenos que tengo una tabla pruebas definida como sigue:
create table pruebas (id serial, campo2 integer, valor3 float);

En una funcion plpgsql tengo definida una variable

filaPruebas pruebas%ROWTYPE;

en el cuerpo de la funcion asigno valores a los campos:

filaPruebas.campo2:= 7;
filaPruebas.campo3:= 27.3;

Luego hago un :

insert into pruebas select filaPruebas.*;

Problema, da un error porque el campo id no puede ser nulo. En principio lo arregle creando una funcion simple que devuelve el máximo id + 1 o 1 si la tabla esta vacia.

El problema es que si despues de haber ejecutado la funcion ejecuto desde otro sitio intento:
Insert into pruebas (valor2, valor3) values (36, 34.6); da un error de clave duplicada ya que intenta asignar un valor al campo id que ya esta asignado. He buscado en internet y la gente lo soluciona actualizando el id de la secuencia cada vez que actualiza (en mi caso desde la función).

Mi pregunta es: No existe una manera mas elegante de hacer todo esto sin tener que estar preguntando cual es el siguiente cuando se esta utilizando %rowtype. No se que les parece a ustedes pero usar un serial y luego buscar el siguiente a manos me parece un poco extraño.


Saludos