1. 程式人生 > >mysql儲存函式(2018.10.10學習筆記)

mysql儲存函式(2018.10.10學習筆記)

DELIMITER //

-- 自定義函式
-- 函式要素:函式名,引數列表(形參和實參),返回值,函式體(作用域)
-- 建立函式
-- 建立語法

CREATE FUNCTION functionName([形參列表]) RETURNS 資料型別 -- 規定要返回的資料型別
BEGIN
	-- 函式體
	-- 返回值:return 型別(指定資料型別);
END

CREATE FUNCTION f1() RETURNS INT
RETURN 100;

-- 自定義函式與系統函式呼叫方式是一樣:select 函式名([實參列表]);

-- 呼叫函式
SELECT fi();

-- 檢視所有函式
SHOW FUNCTION STATUS\G

-- 檢視函式建立語句
SHOW CREATE FUNCTION f1\G

-- 刪除函式
DROP FUNCTION f1;

-- 函式引數
-- 引數分兩種:定義時的引數叫形參,呼叫時的引數叫實參(實參可以是數值也可以是變數,實參要求必須指定資料型別)
FUNCTION 函式名(形參名字 欄位型別) RETURNS 資料型別

-- 做函式:計算1-n之間的和
CREATE  FUNCTION f2(int_1 INT) RETURNS INT
BEGIN
	-- 定義條件變數
	SET @i = 1;	-- @符號定義的變數是全域性變數,沒有的可以理解為區域性變數
	SET @res = 0;	-- 儲存結果
	
	-- 迴圈求和
	WHILE @i <= int_1 DO
		-- 求和:任何變數要修改,必須使用set關鍵字
		-- mysql中沒有+=,沒有++
		SET @res = @res + @i;
		
		-- 修改迴圈變數
		SET @i = @i + 1;
	END WHILE;
	-- 返回值
	RETURN @res;
END
//


-- 作用域
-- mysql中的作用域與js中的作用域完全一樣
-- 全域性變數可以在任何地方使用;區域性變數只能在函式內部使用

-- 全域性變數:使用set關鍵自定義,使用@符號標誌
-- 區域性變數:使用declare關鍵字宣告,沒有@符號;所有的區域性變數的宣告,必須在函式體開始之前

-- 求和:1-n之間的和,要求5的倍數不加
CREATE FUNCTION f3(int_1 INT) RETURNS INT
BEGIN
	-- 宣告變數:迴圈變數,結果變數
	DECLARE i INT DEFAULT 1;
	DECLARE res INT DEFAULT 0;	-- 定義區域性變數可以有屬性
	
	-- 迴圈判斷
	mywhile:WHILE i <= int_1 DO
		-- 相加:判斷
		IF i % 5 = 0 THEN
			-- 修改迴圈條件
			SET i = i + 1;
			-- 不符合條件:迴圈重新來過
			ITERATE mywhile;
		END IF;
		-- 相加
		SET res = res + i;
		
		-- 改變迴圈變數
		SET i = i + 1;
	END WHILE;
	-- 返回結果
	RETURN res;
END//