一、遊標
1、格式
-- 聲明語法 declare cursor_name cursor for select_statement -- 打開語法 open cursor_name -- 取值語法 fetch cursor_name int vat_neme 【,var_name】... -- 關閉語法 close cursor_name
2、操作
DROP PROCEDURE IF EXISTS proc1; delimiter $$ create procedure proc1() begin -- 定義局部變量 DECLARE var_user_name VARCHAR(20); DECLARE var_sex VARCHAR(20); DECLARE i int DEFAULT 0; DECLARE num int; -- 聲明遊標 DECLARE my_cursor cursor for SELECT user_name ,sex from users; -- 打開遊標 open my_cursor; SET num=(SELECT count(1) FROM users); -- 使用循環讀取遊標的值 label:repeat set i=i+1; # 通過遊標獲取值 FETCH my_cursor into var_user_name,var_sex; SELECT var_user_name,var_sex; UNTIL i>num END repeat label; -- 關閉遊標 CLOSE my_cursor; end $$ delimiter ; call proc1();
二、函數
1、格式
create function func_name([param_name type[,...]]) returns type [characteristic ...] begin routine_body end;
參數說明:
(1) func_name 存儲函數的名稱
(2) param_name type 可選項,指定存儲函數的參數。type參數用於指定存儲函數的參數類型,該類型可以是mysql數據庫中所有支持的類型。
(3) returns type指定返回值的類型
(4) characteristic 可選項,指定存儲函數的特性
(5) routine_body sql代碼內容
2、操作
沒有輸入參數
-- 允許創建函數權限信任 set GLOBAL log_bin_trust_function_creators = TRUE; drop FUNCTION if EXISTS func1; delimiter $$ CREATE FUNCTION func1() RETURNS int BEGIN DECLARE cnt int DEFAULT 0; SELECT count(*) into cnt from users; RETURN cnt; end $$ delimiter ; -- 調用存儲過程 SELECT func1();
有輸入參數
-- 允許創建函數權限信任 set GLOBAL log_bin_trust_function_creators = TRUE; drop FUNCTION if EXISTS func2; delimiter $$ CREATE FUNCTION func2(in_name VARCHAR(20)) RETURNS int BEGIN DECLARE cnt int DEFAULT 0; SELECT count(*) into cnt from users WHERE user_name=in_name; RETURN cnt; end $$ delimiter ; -- 調用存儲過程 SELECT func2('迪麗熱巴');