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語句來顯示。 */
MySql函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.