Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
Crear secuencia numerica con un procedimiento almacenado

Saludos a todos...

Estoy realizando un procedimiento almacenado que debe retornar una secuencia de numeros, esten o no esten en una tabla. La siguente tabla tiene un campo de codigos de cuentas contables (COD_INF), fijense que hay codigos que están salteados (1104 brinca a 1500):

Código:
  COD_INF	ESTADO    DESCRI_1		    			
  =======	======	======================================
  1100	   0		 ACTIVO FIJOS
  1101	   1		 CAJA Y BANCOS
  1102	   1    	 EFECTOS Y CUENTAS POR COBRAR    
  1103	   2    	 OTRAS CUENTAS POR COBRAR    			
  1104	   1		 INVENTARIO INICIAL
  1500	   0		 ACTIVO FIJO	  
  2102	   2		 CONTRIBUCIONES POR PAGAR
  2103	   2		 OTRAS CUENTAS POR PAGAR
  2105	   2		 PRESTACIONES SOCIALES
  3100	   3		 PATRIMONIO
  3101	   3		 PATRIMONIO 
  4100	   0		 INGRESOS
  4101	   4		 INGRESO POR VENTAS
  4102	   4		 OTROS INGRESOS
  4200	   5		 DESCUENTOS Y PROMOCIONES
  4201	   5		 DESCUENTOS Y DEVOLUCIONES
  4202	   5		 PROMOCIONES Y BONIFICACIONES
  5100	   5		 COSTO DE VENTAS
  5101	   5		 COSTO DE VENTAS
  6100	   5		 GASTOS DE OPERACION
  6120	   5		 GASTOS DE PERSONAL
  6130	   5		 GASTOS DEL LOCAL
  6140	   5		 GASTOS DE VEHICULOS
  6150	   5    	 GASTOS DE ADMINISTRACION    			 
  6160	   5		 OTROS GASTOS
... lo que quiero es que esos codigo aparezcan en el resultado, obviamente con los campos restantes en blanco (pues esos códigos no exsten en realidad). El procedimiento almacenado ya lo cree, y funciona... excepto por un pequeño detalle: si el resultado de la consulta con devuelve valores el contador tampoco tiene efecto. He aquí el procedimiento almacenado del que hablo:

Código SQL [-]
  set term !!;
  create procedure rellenar
  returns (cod_inf  char(4),
           estado   char(1),
           descri_1 char(40))
  as
  declare variable cont int;
  begin
      cont = 1000;
      while (cont <= 7000) do
      begin
          for
              select cod_inf, estado, descri_1
              from scginf
              where estado = 6 /* si quito esta linea obtengo una secuencia */
              order by cod_inf
              into :cod_inf, :estado, :descri_1
          do
          begin
              if (:cod_inf <> cont) then
              begin
                  cod_inf = cont;
                  estado = '';
                  descri_1 = '';
              end
              suspend;
          end
          cont = cont + 1;
      end
  end!!
  set term ;!!

Y aquí la sentencia que la ejecuta:

Código SQL [-]
  select * from rellenar

Noten que en el WHERE le indico que ESTADO debe ser igual a 6, ya que no hay registros con ese numero la consulta queda vacía, pero el asunto es que si cont es diferente a cod_inf (o sea, no existe ese codigo) debería sustituir el codigo contable con el contador, y mostrar una secuencia numerica del 1000 al 7000... eso funciona solamente si quito la clausula WHERE.

Cualquier comentario, critica (constructiva o destructiva), será bien recibida ...
__________________
"Nadie es perfecto" (Don Nadie)
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 06:53:43.


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