MySql函數

DELIMITER $$

DROP FUNCTION IF EXISTS test_fun1$$

CREATE FUNCTION test_fun1 (df1 INT) RETURNS VARCHAR(20)
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '這是函數的描述'

BEGIN
SET df1 = 13;
INSERT INTO testtable1(NAME)VALUES('li');
SELECT COUNT(*) INTO @cun FROM testtable1;
RETURN @cun+"";

END$$


DELIMITER ;


SET @df1 = 12;
SET @df2 = test_fun1(@df1);
SELECT @df1,@df2,@cun;

/*

REATE FUNCTION 方法名 (參數1 類型,參數2 類型,...) RETURNS 返回數據類型
[[NOT] DETERMINISTIC]
[CONTAINS SQL/NO SQL/READS SQL DATA/MODIFIES SQL DATA]
[SQL SECURITY DEFINER/INVOKER ]
[COMMENT '函數說明']
BEGIN
函數體..;

RETURN 數據;
END


方法的參數沒有OUT,INOUT類型,一律IN類型


DETERMINISTIC會把返回結果高速緩存,每次調用函數如果輸入參數相同則返回的是高速緩存的結果
NOT DETERMINISTIC相反不高速緩存,每次重新求值返回結果
默認是NOT DETERMINISTIC
通常要明確爲DETERMINISTIC或者標註爲NO SQL否則會報錯

一些特徵提供方法使用數據的內在信息。
CONTAINS SQL表示方法不包含讀或寫數據的語句。
NO SQL表示方法不包含SQL語句。
READS SQL DATA表示方法包含讀數據的語句,但不包含寫數據的語句。
MODIFIES SQL DATA表示方法包含寫數據的語句。如果這些特徵沒有明確給定。
默認的是CONTAINS SQL。

SQL SECURITY特徵可以用來指定 方法該用創建方法者的許可來執行,還是使用調用者的許可來執行。默認值是DEFINER。
在SQL:2003中者是一個新特性。創建者或調用者必須由訪問方法關聯的數據庫的許可。在MySQL 5.1中,必須有EXECUTE權限才能執行方法。
必須擁有這個權限的用戶要麼是定義者,要麼是調用者,這取決於SQL SECURITY特徵是如何設置的。

MySQL存儲sql_mode系統變量設置,這個設置在方法被創建的時候起作用,MySQL總是強制使用這個設置來執行方法。

COMMENT子句是一個MySQL的擴展,它可以被用來描述 存儲程序。這個信息被SHOW CREATE PROCEDURE和 SHOW CREATE FUNCTION語句來顯示。
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章