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
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:
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 ...