USE `vn`; DELIMITER $$ USE `vn`$$ CREATE DEFINER=`root`@`%` PROCEDURE `item_getVisibleAvailable`( vItem INT, vDate DATE, vWarehouse TINYINT, vRefresh BOOL) BEGIN DECLARE vVisibleCalc INT; DECLARE vAvailableCalc INT; DECLARE vVisibleAltillo INT; CALL cache.available_refresh(vAvailableCalc, FALSE /*vRefresh*/ , vWarehouse, vDate); CALL cache.visible_refresh(vVisibleCalc, FALSE,vWarehouse); SELECT visible INTO vVisibleAltillo FROM vn.itemShelvingStock WHERE itemFk = vItem AND warehouseFk = vWarehouse; IF vRefresh THEN DROP TEMPORARY TABLE IF EXISTS vn2008.tmp_item; CREATE TEMPORARY TABLE vn2008.tmp_item (PRIMARY KEY (item_id)) ENGINE = MEMORY SELECT vItem item_id, 0 stock, 0 visible; SELECT i.id, i.longName, i.box, i.typeFk, i.tag5,i.value5,i.tag6,i.value6,i.tag7,i.value7,i.tag8,i.value8, ip.code, ip.reserve, vi.visible - IFNULL(vVisibleAltillo,0) AS visible, av.available FROM vn.item i LEFT JOIN vn.itemPlacement ip ON i.id = ip.itemFk AND ip.warehouseFk = vWarehouse LEFT JOIN vn2008.tmp_item v ON v.item_id = i.id LEFT JOIN cache.available av ON av.calc_id = vAvailableCalc AND av.item_id = i.id LEFT JOIN cache.visible vi ON vi.calc_id = vVisibleCalc AND vi.item_id = i.id LEFT JOIN cache.stock st ON st.warehouse_id = vWarehouse AND st.item_id = i.id WHERE (vItem IS NULL OR i.id = vItem); ELSE SELECT i.id, i.longName, i.box, i.typeFk, i.tag5,i.value5,i.tag6,i.value6,i.tag7,i.value7,i.tag8,i.value8, ip.code, ip.reserve, v.visible - IFNULL(vVisibleAltillo,0) AS visible, av.available FROM vn.item i LEFT JOIN vn.itemPlacement ip ON i.id = ip.itemFk AND ip.warehouseFk = vWarehouse LEFT JOIN cache.visible v ON v.item_id = i.id AND v.calc_id = vVisibleCalc LEFT JOIN cache.available av ON av.item_id = i.id AND av.calc_id = vAvailableCalc WHERE (vItem IS NULL OR i.id = vItem); END IF; END$$ DELIMITER ; ;