MySql存儲過程遊標、函數

一、遊標

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('迪麗熱巴');

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章