存儲過程和函數

存儲過程:一組預先編譯好的sql語句的集合,理解成批處理語句。sql

  1. 提升代碼的重用性
  2. 簡化操做
  3. 減小了編譯次數而且減小了和數據庫服務器的鏈接次數,提升了效率

1、建立語法

create procedure 存儲過程名(參數列表)
begin
    存儲過程體(一組合法的sql語句)
end

注意:數據庫

  1. 參數列表包含三部分: 參數模式、參數名、參數類型。例:in stuname varchar(20);
  • 參數模式:
    in:該參數能夠做爲輸入,也就是該參數須要調用方傳入值
    out:該參數能夠做爲輸出,也就是該參數能夠做爲返回值
    inout:該參數既能夠做爲輸入又能夠做爲輸出,也就是該參數既須要傳入值,又能夠返回值
  1. 若是存儲過程體僅僅只有一句話,begin end能夠省略。存儲過程體中的每條sql語句結尾要求必須加分號。存儲過程的結尾可使用delimiter從新設置
    delemiter 結束標記

2、調用語法

語法:服務器

call 存儲過程名(實參列表);
  1. 空參列表
    案例:插入admin表中五條記錄
delimiter $
create procedure myok()
begin
    insert into admin(username,password)
    values ('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
end $

call mypl()$
  1. 帶in模式參數的存儲過程
    案例1根據女神名,查詢對應的男神信息
create procedure myp2(in beatuName varchar(20))
begin
    select bo.*
    from boys bo
    right join beauty b on bo.id=b.boyfriend_id
    where b.name=beautyName;

end

案例2:用戶是否登陸成功函數

create procedure myp3(in username varhchar(10),in password varchar(20))
begin
    declare result int default 0;
    select count(*) into result
    from admin
    where admin.username=username 
    and admin.password=password;
    
    select if(result >0,'成功','失敗);
end $
  1. 帶out模式的存儲結構
    案例1:根據女神名,返回對應的男神名
delimiter $
create procedure myp5(in beautyName varchar(20),out boyName varchar(20))
begin
    select bo.boyName into boyName
    from boys bo
    inner join beauty b on bo.id = b.boyfriend_id
    where b.name=beautyName;
end$

set @bNme$
call myp5('小昭',@bName)$
select @bName$

案例2:根據女神名,返回對於的男神名和男神魅力值code

delimiter $
create procedure myp6(in beautyName varchar(20),out boyName varchar(20),out userCP int)
begin
    select bo.boyName ,bo.userCP into boyName,userCP
    from boys bo
    inner join beauty b on bo.id=b.boyfriend_id
    where b.name=beautyName;
end $
  1. 帶inout模式參數的存儲過程
    案例1:傳入a和b兩個值,最終a和b都翻倍返回
create procedure myp8(inout a int,inout b int)
begin
    set a=a*2
    set b=b*2;
end$

3、刪除存儲過程

語法:drop procedure 存儲過程名it

4、查看存儲過程的信息

語法:show create procedure 存儲過程名;io

5、函數

與存儲過程基本相同,區別在於
存儲過程:能夠有0個返回,也能夠有多個返回,適合作批量插入,批量更新
函數:有且僅有一個返回,適合作 處理數據後返回一個結果。編譯

1、建立語法

create function 函數名(參數列表) returns 返回類型
begin
    函數體
end

注意:ast

  1. 參數列表包含兩部分:參數名 參數類型
  2. 函數體:必須有return語句
  3. 函數體中僅有一句話,能夠省略begin end
  4. 使用delimiter語句設置結束標記

2、調用語法

SELECT 函數名(參數列表)
  1. 無參有返回
    案例:返回公司的員工個數
CREATE FUNCTION myf1() RETURNS INT
BEGIN
    DECLARE c INT DEFAULT 0;
    SELECT COUNT(*)
    FROM employees;
    RETURN c;
END
  1. 有參有返回
    案例1:根據員工名,返回工資
CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE
BEGIN
	SET @sal=0;
	SELECT salary INTO @sal
	FROM employees
	WHERE last_name = empName;
	
	RETURN @sal;
END$

案例2:根據部門名,返回該部門的平均工資function

CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE
BEGIN
	DECLARE sal DOUBLE;
	SELECT AVG(salary) INTO sal
	FROM employees e
	JOIN departments d ON e.department_id = d.department_id
	WHERE d.department_name=deptName;
	RETURN sal;
END$

3、查看函數

語法

show create function 函數名;

4、刪除函數

drop function 函數名;
相關文章
相關標籤/搜索