/* 暫時修改 delimiter 為 $$ */ DELIMITER $$ /*DROP FUNCTION `GetComWin`$$*/ CREATE DEFINER = `root`@`localhost` FUNCTION `GetComWin` ( `v_uid` INT ) RETURNS INT( 11 ) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER BEGIN /* 宣告變數 */ DECLARE v_ComWin INT DEFAULT 0; DECLARE v_u_money INT DEFAULT 0; DECLARE v_u_multi TINYINT DEFAULT 0; /* select 的結果設定到宣告的變數 */ SELECT u_money,u_multi INTO v_u_money,v_u_multi FROM f_user WHERE u_id=v_uid FOR UPDATE; /* IF ... THEN ... ELSE ...END IF; */ IF v_u_multi = 1 THEN SELECT SUM(o_money) - SUM(o_result) INTO v_ComWin FROM f_order WHERE u_id =v_uid FOR UPDATE; IF v_ComWin <=> NULL THEN /* 判斷是否為 NULL */ SET v_ComWin = 0; END IF; ELSE SET v_ComWin = v_u_money; /* 設定變數值 */ END IF; RETURN v_ComWin; END$$ /* 將 delimiter 改回 ; */ DELIMITER ;
範例2:
/* 暫時修改 delimiter 為 $$ */ DELIMITER $$ CREATE FUNCTION `GetAllParentID` ( `p_id` INT UNSIGNED ) RETURNS TEXT NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER BEGIN /* 宣告變數 */ DECLARE x_res TEXT; DECLARE x_id INT UNSIGNED; DECLARE x_up_id INT UNSIGNED; DECLARE x_times TINYINT DEFAULT 0; /* repeat 迴圈 */ REPEAT SELECT u_id,u_up_id INTO x_id,x_up_id FROM f_user WHERE u_id=p_id; SET x_times = x_times+1; IF x_times = 1 THEN SET x_res = x_up_id; ELSE SET x_res = CONCAT(x_up_id,',',x_res); END IF; SET p_id = x_up_id; UNTIL x_up_id <= 1 OR x_id <=> NULL END REPEAT; IF x_up_id<=>NULL OR x_up_id=0 THEN /* 丟出異常 */ SIGNAL SQLSTATE '99999' SET MESSAGE_TEXT = 'GetAllParentID Error'; END IF; RETURN x_res; END$$ /* 將 delimiter 改回 ; */ DELIMITER ;
/* repate 迴圈 */ should be repeat
回覆刪除感謝告知,已修正。
刪除