12/11/2013, 09:01
|
| | Fecha de Ingreso: diciembre-2012
Mensajes: 4
Antigüedad: 11 años, 10 meses Puntos: 0 | |
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 |