总忘记mysql存储过程的语法,
然后百度出来的答案总写不全,
自己写个例子...
IF ((b_type IS NOT NULL) AND (c_type IS NOT NULL)) THEN
IF (b_type =c_type) THEN
SELECT 1;-- 一定得写一句话,不知道有没有类似于python中的pass
ELSEIF (b_type !=c_type) THEN
IF (c_type = 1) THEN
SELECT 3;
END IF;
END IF;
END IF;
想起之前建军大爷总让我在if的条件里面写成Null != xxx,说是万一xxx妹汁的时候可以避免错误。
但目前的编程语言都没遇到过必须写成这样的情况。可能是c或者c++里面的习惯?
DELIMITER $$
USE `zeus`$$
DROP PROCEDURE IF EXISTS `inventory_cost`$$
CREATE DEFINER=`zeusquery`@`%` PROCEDURE `inventory_cost`()
BEGIN
CREATE TABLE IF NOT EXISTS zeus_tmp.tmpPro_inventory_cost LIKE zeus.inventory_cost;
DELETE FROM zeus_tmp.tmpPro_inventory_cost;
CREATE TABLE IF NOT EXISTS zeus_tmp.tmpDistinct_inventory_cost(
`org_id` DOUBLE ,
`warehouse_id` DOUBLE ,
`item_id` DOUBLE
);
DELETE FROM zeus_tmp.tmpDistinct_inventory_cost;
INSERT INTO zeus_tmp.tmpDistinct_inventory_cost
SELECT DISTINCT org_id,warehouse_id, item_id FROM zeus_tmp.tmp_inventory_cost;
BEGIN
DECLARE b_org_id INT(11);
DECLARE b_warehouse_id INT(11);
DECLARE b_item_id INT(11);
DECLARE ws_done INT(11) DEFAULT 0;
DECLARE ws CURSOR FOR SELECT DISTINCT org_id ,warehouse_id,item_id FROM zeus_tmp.tmpDistinct_inventory_cost;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET ws_done = 1;
OPEN ws;
loop1:LOOP
IF ws_done = 1 OR cal_flag=length_tmp_inventory_cost THEN
LEAVE loop1 ;
END IF ;
FETCH NEXT FROM ws INTO b_org_id ,b_warehouse_id, b_item_id;
END LOOP loop1;
CLOSE ws;
END;
END$$
DELIMITER ;