Función recursiva

From: will <wrbutros(at)rizoma(dot)cl>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Función recursiva
Date: 2012-03-05 15:59:43
Message-ID: 4F54E2EF.1080405@rizoma.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos,

Resulta que estoy integrando en un POS (bajo la GPL) una funcionalidad
para vender mercaderías compuestas,
entendiendo por 'mercadería compuesta' a un producto integrado por otros
2 o más productos,
tal como las ofertas, de modo que al vender esta mercadería puedo
rebajar el stock de sus componentes.
Cuando se crea la mercadería compuesta también se define la cantidad de
unidades de cada
componente que participa de ella.

Ej: Oferta A = 2xMantquillas + 1xPan

Hasta ahí todo bien.
El problema radica cuando asocio una mercadería compuesta a otra, el
sistema debería
ser capaz de recorrer todo sus componentes y sub-componentes para
obtener el stock
'posible' del compuesto. Para ello he creado una función recursiva, sin
embargo no da el resultado esperado.

Adjunto el link de la tabla de asociación:
http://pastebin.com/rqip8ddd

nota: tipo 4 = compuesta,
tipo 1 = corriente,

cant_mud = las unidades de la mercadería que participa del
compuesto.

Esta tabla también la utilizo para asociar materias primas a
mercaderías derivadas de ellas
pero los eximo de esta explicación.

Adjunto el link de la función:
http://pastebin.com/h0V1fsvy

La función retorna el stock que corresponde cuando se consulta por una
mercadería
corriente (una normal), y cuando se consulta por una mercadería
compuesta integrada
por mercaderías corrientes.
Pero cuando consulto por una mercadería compuesta, donde uno de sus
componentes
es otro compuesto (incluso si este compuesto solo tiene mercaderías
corrientes) me retorna 0.

En este ejemplo específico si llamo a la función se esta forma:

select * from obtener_stock_desde_barcode(1313000)
resulta 10 (esta bien)

pero si hago:
select * from obtener_stock_desde_barcode(1414000)
retorna 0, se supone que dentro de sí esta función se llama a sí misma
de esta forma:
select * from obtener_stock_desde_barcode(1313000) y da como resultado 0,
cuando debería retornar 10.

Ese es el problema, si ejecuto select * from
obtener_stock_desde_barcode(1313000)
me da el resultado esperado, pero no así cuando se ejecuta esa misma
sentencia
dentro de sí misma. )=

Estaré omitiendo algo?
Está bien realizarlo de esta forma o existe algún proceso especial para
trabajar con recursividad
en postgresql?

De antemano muchísimas gracias! =)

----
P.D:
Leí de antemando sobre esta funcionalidad
http://wiki.postgresql.org/wiki/CTEReadme
pero por lo visto no es aplicable a mi situación, puesto que no solo
debo consultar los datos
sino también calcular el stock por cada componente y subcomponente.
(y además porque un compuesto puede tener otro compuesto)

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message motum hesa 2012-03-05 16:42:07 Re: Consulta anidada con valores nulos
Previous Message Alvaro Hilario 2012-03-05 15:15:42 Consulta anidada con valores nulos