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語句來顯示。
*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM