Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

MAX(column)

Estas en el tema de MAX(column) en el foro de PostgreSQL en Foros del Web. Hola! Me ha surgido un problema a la hora insertar un registro en la columna de una tabla de mi base de datos. La tabla ...
  #1 (permalink)  
Antiguo 19/11/2008, 06:28
 
Fecha de Ingreso: noviembre-2008
Mensajes: 8
Antigüedad: 16 años
Puntos: 0
MAX(column)

Hola!
Me ha surgido un problema a la hora insertar un registro en la columna de una tabla de mi base de datos.
La tabla 'XXXXX' tiene los siguientes campos:
codConta,codSociedad, serie, numFactura, precio1, precio2.....

En esta tabla el campo 'numFactura' se inserta con el máximo número de factura +1 insertado según el campo 'codSociedad'. Al realizar la carga realizaba la siguiente consulta que funcionaba bien ya que por cada registro era un codSociedad diferente.

SELECT codSociedad, serie,Max(numFactura)
FROM 'XXXXX'
GROUP BY codSociedad, serie;

De aquí obtenía el máximo valor de la última factura emitida por una sociedad, y lo incrementaba en uno.

Ahora me encuentro con el problema que al realizar una carga de registros sobre esta tabla, puede venir el mismo campo codSociedad en diferentes registros y por lo tanto obtengo los mismos 'numFactura' lo cual no es posible ya que tiene que ir incrementandose.

No sé si he logrado explicarme muy bien, para cualquier duda no dudéis en preguntarme.
  #2 (permalink)  
Antiguo 19/11/2008, 16:18
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: MAX(column)

Cita:
Ahora me encuentro con el problema que al realizar una carga de registros sobre esta tabla, puede venir el mismo campo codSociedad en diferentes registros y por lo tanto obtengo los mismos 'numFactura' lo cual no es posible ya que tiene que ir incrementandose.
Es logico, si no actualizas el numFactura -> max(numFactura) siempre será el mismo.
Tendras que hacer una carga de datos menos general.

Salu2
  #3 (permalink)  
Antiguo 20/11/2008, 02:20
 
Fecha de Ingreso: noviembre-2008
Mensajes: 8
Antigüedad: 16 años
Puntos: 0
Respuesta: MAX(column)

No entiendo el hecho de hacer una carga menos general. A través de una select obtengo los diferentes registros que tengo que facturar, y al insertarlos tengo que asignarles un numFactura.
  #4 (permalink)  
Antiguo 20/11/2008, 08:02
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: MAX(column)

Y en el momento de hacer la select el maximo coincide para todos los registros con el mismo codSociedad.
En lugar de hacer la select para hacer un insert "maxivo", create una funcion que haga los inserts por separado
  #5 (permalink)  
Antiguo 21/11/2008, 02:38
 
Fecha de Ingreso: noviembre-2008
Mensajes: 8
Antigüedad: 16 años
Puntos: 0
Respuesta: MAX(column)

El hecho de no haberme planteado la solución que me indicas es debido a que si tengo un error de inserción, por ejemplo en el tercer registro, las dos primeras ya habrán sido insertadas, y no quiero que esto ocurra. Aparte que el tiempo de ejecución será mucho más largo porque la carga de registros suele ser grande.
  #6 (permalink)  
Antiguo 21/11/2008, 05:02
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: MAX(column)

Cita:
Iniciado por lauryn1298 Ver Mensaje
El hecho de no haberme planteado la solución que me indicas es debido a que si tengo un error de inserción, por ejemplo en el tercer registro, las dos primeras ya habrán sido insertadas, y no quiero que esto ocurra.
Existen los rollback si cancelas una funcion, deshace los inserts!

Cita:
Aparte que el tiempo de ejecución será mucho más largo porque la carga de registros suele ser grande.
Que son grandes?
El tiempo de ejecución es algo crucial?

Otra opcion:
Inserta todo menos el campo numFactura y luego actualizas ese campo.

Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:57.