Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Incrementar Campo

Este procedimiento es aplicado para generar en un campo NR un valor incremental. Pero lo resultados son que siempre ve guarda en el campo el ultimo numero que consulta. Es decir hay 93 registros con ese filtro y almacena 93 en el campo NR pero para todos los registro, cuando deberia ser su incremento desde el 1 hasta el 93 en forma sucesiva. Les dejo el sp para que lo corrigan. Gracias por su atencion.


Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE RELLENAR 
AS
DECLARE VARIABLE X_CODIGO_DO INTEGER;
DECLARE VARIABLE I INTEGER;
begin
  i=1;
  for select codigo_suscriptor
      from facturacion
      where codigo_suscriptor='2580'
      into :x_codigo_do
  do
  begin
    i=i+1;
    update facturacion
    set nr=:i
    where codigo_suscriptor=:X_codigo_do;
  end
  suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON FACTURACION TO PROCEDURE RELLENAR;
GRANT EXECUTE ON PROCEDURE RELLENAR TO SYSDBA;
Responder Con Cita
  #2  
Antiguo 30-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código:
select codigo_suscriptor
      from facturacion
      where codigo_suscriptor='2580'
      into :x_codigo_do
Es que si buscas el codigo_suscriptor=2580' te devolverá el '2580',
o sea, el bucle posterior no hace nada porque sólo hay uno, el 2580.
Responder Con Cita
  #3  
Antiguo 30-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Gracias por tu tiempo. No vemos de nuevo

Es decir, el filtro lo aplico en el where del update ? o como deberia ir ?
Responder Con Cita
  #4  
Antiguo 30-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Debería de ir, depende de lo que quieras hacer
Responder Con Cita
  #5  
Antiguo 30-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

codigo_suscriptor no es la clave primaria de esa tabla, ¿ verdad ?. Tienes que utilizar la clave primaria para identificar cada uno de los registros a actualizar. Sino ocurre lo que te está pasando ahora, que en cada pasada del bucle actualizas todos los registros afectados (y claro, al final solo queda el valor puesto en la última pasada).

Es decir, supongamos que la clave primaria se llama simplemente ID_FACTURA. Entonces tu procedimiento almacenado queda :

Código:
SET TERM ^ ;
CREATE PROCEDURE RELLENAR 
AS
DECLARE VARIABLE ID_FACTURA;
DECLARE VARIABLE I INTEGER;
begin
  i=1;
  for select ID_FACTURA
      from facturacion
      where codigo_suscriptor='2580'
      into :ID_FACTURA
  do
  begin
    i=i+1;
    update facturacion
    set nr=:i
    where ID_FACTURA = :ID_FACTURA;
  end
  suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON FACTURACION TO PROCEDURE RELLENAR;
GRANT EXECUTE ON PROCEDURE RELLENAR TO SYSDBA;
NOTA: He puesto en negrita los cambios que tienes que hacer (claro que en lugar de ID_FACTURA tienes que usar el nombre de tu campo de clave primaria).
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 30-04-2010 a las 19:06:56.
Responder Con Cita
  #6  
Antiguo 05-05-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Buenos dias,

Efectivamente el codigo_suscriptor no es la clave primaria, la tabla tampoco tiene clave primaria. La idea es que el campo que vamos incrementar sucesivamente en forma ascendente es ID_FACTURA el no existe y lo vamos a crear, hay que tener en cuenta que el codigo_suscriptor se repite varias veces y necesito identificarlo en la tabla con un numero que no se repita para nadie, por eso pense en un campo autoincrementable. Gracias por tu tiempo
Responder Con Cita
  #7  
Antiguo 05-05-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Hago una correccion. El campo que necesito incrementar es nr (numero de registro asi lo llamo) ese vendria a ser la clave primaria pero necesitamos crearla ya despues de creada la tabla. Nuevamente gracias por su valioso tiempo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Incrementar Un Registro einarcito SQL 3 21-10-2008 14:13:02
Incrementar campo según el valor de otro subzero Firebird e Interbase 3 06-08-2008 21:41:52
Incrementar en 1 un campo númerico efelix Conexión con bases de datos 5 03-12-2007 19:36:54
Incrementar numeros en un campo desde delphi dariana20 SQL 6 25-05-2006 22:40:46
Incrementar un campo numerio edwin1 OOP 1 11-08-2003 21:32:01


La franja horaria es GMT +2. Ahora son las 17:06:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi