SQL - OTRA DE CURSORES

   
Vista:

OTRA DE CURSORES

Publicado por Bernabe (1 intervención) el 20/03/2008 22:52:04
Estimados: me pongo en contacto con uds para realizarles la siguiente pregunta.
Antes una aclaracion: me harte de buscar en el google una posible respuesta, incluso en este mismo foro y no he encontrado nada.

He leido muchos comentarios/articulos/opiniones que plantean que la utilizacion de cursores es NEGATIVA en cuanto a la performance del motor de base de datos. Sin embargo, en ninguno de estos articulos he encontrado la forma de reemplazar el uso del cursor (salvo uno que utiliza tabla temporales y recorre con un WHILE uno a uno los registros, lo que me parece igual de perjudicial para el motor). Vamos a un ejemplo:

Supongamos un sistema para control de stock en una discoteca, la estructura BASICA de tablas seria algo asi

TRAGOS
id_trago
descripcion
precio

BEBIDAS
id_bebida
descripcion
cant_stock

COMPOSICIONES
id_proporcion
id_trago
id_bebida
proporcion

Entonces, supongamos el TRAGO WHISKY CON COCA COLA. Dicho trago esta ccompuesto por WHISKY y por COCA COLA. Esa composicion esta guardada en la tabla COMPOSICIONES donde se registra que cantidad lleva de cada uno.
Supongamos entonces que podemos definir al trago WHISKY CON COCA COLA de la siguiente manera:

WHISKY CON COCA COLA
WHISKY --- 0.07
COCA COLA --- 0.20

Esto quiere decir que, cuando se VENDA un WHISKY CON COCA COLA se deben DESCONTAR del stock de BEBIDAS 0.07 de WHISKY y 0.20 de COCA COLA.

Si por ejemplo, tuvieramos en la barra una botella de WHISKY y una botella de COCA COLA, luego de vender un WHISKY CON COCA COLA, WHISKY quedaria en 0.93 (resta 0.07) y COCA COLA quedaria en 0.80 (resta 0.20).

Vamos bien?

Ahora, esta operacion seria muy simple de llevar a cabo utilizando un cursor en un procedimiento almacenado. Simplemente me imagino, seleccionar todas las composiciones de WHISKY CON COCA COLA y recorrerlas una a una para ir DECREMENTANDO el STOCK en la tabla BEBIDAS de acuerdo a la proporcion establecida para cada bebida base.

Ahora... la gran pregunta: COMO PUEDO HACER ESTO SIN LA UTILIZACION DE CURSORES ????
HAY ALGUNA FORMA O ESTE ES EL CASO QUE PLANTEAN EN MUCHOS LADOS EN LA RED DONDE NO SE PUEDE NO UTILIZAR CURSORES ???

Tal vez les resulte una pavada pero esta pregunta me la vengo haciendo hace unos dias y todavia no encuentro una consulta SQL que me permita hacer esa actualizacion. Les agradeceria MUCHISIMO si alguien me puede tirar una idea de como se podria hacer para no caer en la utilizacion de cursores. Espero sus respuestas!!!! Muchas gracias !!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder