SQL编程---存储过程和存储函数
生活随笔
收集整理的這篇文章主要介紹了
SQL编程---存储过程和存储函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.基本概念
- 存儲過程和函數是事先經過編譯并存儲在數據庫中的一段 SQL 語句的集合。
2.存儲過程和函數的好處
3.創建和調用存儲過程
<1>創建存儲過程
創建存儲過程-- 修改分隔符為$[不然默認到;結束,后面的執行不到]DELIMITER $-- 標準語法CREATE PROCEDURE 存儲過程名稱(參數列表)BEGINSQL 語句列表;END$-- 修改分隔符為分號[;前面有空格]DELIMITER ;<2>調用存儲過程
調用存儲過程CALL 存儲過程名稱(實際參數);舉例學生表使用存儲過程查看信息
<1>創建stu_group()存儲過程,封裝 分組查詢總成績,并按照總成績升序排序的功能
<2>調用stu_group()存儲過程
CALL stu_group();結果:
<3>查看/刪除存儲過程
4.存儲函數
<1>概念
存儲函數和存儲過程理解上是一樣的,只是存儲函數有返回值,必須寫return語句。
<2>很多存儲函數mysql底層幫我們實現了
如:
格式化日期結果:
<3>自己創建存儲函數
創建存儲函數CREATE FUNCTION 函數名稱([參數 數據類型])RETURNS 返回值類型BEGIN執行的sql語句;RETURN 結果;END$需求–定義存儲函數,獲取學生表中成績大于95分的學生數量
DELIMITER $CREATE FUNCTION fun_test1() RETURNS INT BEGIN-- 定義變量DECLARE s_count INT;-- 查詢成績大于95分的數量,為s_count賦值SELECT COUNT(*) INTO s_count FROM student WHERE score > 95;-- 返回統計結果RETURN s_count; END$DELIMITER ;調用刪除函數:
--調用函數 SELECT fun_test1(); -- 刪除函數 DROP FUNCTION fun_test1;5.存儲過程和函數的區別
返回值不同
存儲函數必須有一個且必須只有一個返回值,并且還要指定返回值的數值類型。存儲過程可以有返回值,也可以沒有返回值,甚至可以有多個返回值。
兩者賦值的方式不同:
存儲函數可以采用select …into …方式和set值得方式進行賦值,只能用return返回結果集。存儲過程可以使用select的方式進行返回結果集。
使用方法不同:
函數可以直接用在sql語句當中,可以用來拓展標準的sql語句。存儲過程,需要使用call進行單獨調用,不可以嵌入sql語句當中。
函數中函數體的限制較多:
不能使用顯式或隱式方式打開transaction、commit、rollback、set autocommit=0等。但是存儲過程可以使用幾乎所有的sql語句。
總結
以上是生活随笔為你收集整理的SQL编程---存储过程和存储函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分享一下我珍藏多年的三大平面绘图软件分享
- 下一篇: 存储引擎和数据库锁