欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql的 存儲(chǔ)過(guò)程procedure及具體案例

 更新時(shí)間:2024年06月09日 11:28:57   作者:cssl-虞老師  
存儲(chǔ)過(guò)程是一組為了完成特定功能的SQL語(yǔ)句集合,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字和參數(shù)(如果有)來(lái)執(zhí)行它,今天通過(guò)本文給大家介紹Mysql的 存儲(chǔ)過(guò)程procedure及具體案例,感興趣的朋友一起看看吧

什么是存儲(chǔ)過(guò)程

存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集合,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字和參數(shù)(如果有)來(lái)執(zhí)行它。存儲(chǔ)過(guò)程可以在很多數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中找到,如SQL Server、Oracle、MySQL等。

存儲(chǔ)過(guò)程的好處:

  • 代碼重用:存儲(chǔ)過(guò)程允許你編寫(xiě)一次代碼,然后在多個(gè)地方重復(fù)使用。
  • 簡(jiǎn)化操作:對(duì)于復(fù)雜的數(shù)據(jù)庫(kù)操作,可以將這些操作封裝在存儲(chǔ)過(guò)程中,用戶(hù)只需調(diào)用存儲(chǔ)過(guò)程即可。
  • 提高性能:存儲(chǔ)過(guò)程在首次執(zhí)行時(shí)會(huì)進(jìn)行編譯和優(yōu)化,后續(xù)的調(diào)用會(huì)重用這些編譯后的代碼,從而提高性能。
  • 安全性:通過(guò)存儲(chǔ)過(guò)程,你可以限制對(duì)基礎(chǔ)表的直接訪問(wèn),只允許通過(guò)預(yù)定義的、受控的接口進(jìn)行訪問(wèn)。
  • 集中管理:所有的數(shù)據(jù)庫(kù)操作邏輯都存儲(chǔ)在數(shù)據(jù)庫(kù)中,使得管理和維護(hù)更加容易

使用存儲(chǔ)過(guò)程需要注意的是 :

1. declare語(yǔ)句只能放在存儲(chǔ)過(guò)程的開(kāi)始位置,放在后面就會(huì)報(bào)錯(cuò) 
2. if 語(yǔ)句的后面必須有then,但是不需要begin,在if結(jié)束時(shí)需要end if 
3. 判斷是否為NULL倒是和MSSQL一樣都有IS NULL 
4. delimiter是定界符的意思在結(jié)束的end后面要添加定界符 
5. end if之后必須跟分號(hào),否則語(yǔ)法錯(cuò)誤 
6. while后面跟條件,條件后面要跟一個(gè)do,在while循環(huán)體結(jié)束之后需要end while并以分號(hào)結(jié)束。
7. in 表入?yún)?默認(rèn)) , out 表出參 , inout 表出入?yún)?br />8. 兩種賦值方式: set ,select into
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
SET a = 0;

具體案例:

1. 基本案例

--  代碼
DELIMITER $$
CREATE PROCEDURE test1(IN ss VARCHAR(100))
BEGIN
   SELECT ss ;
END $$
-- 調(diào)用
SET @s1 = '你好' ;
CALL test1(@s1) ;
-- 

2. 帶出參案例

--  代碼

DELIMITER $$
CREATE PROCEDURE testproce(IN score INT,OUT rs VARCHAR(200))
BEGIN
   DECLARE sc INT;
   SET sc = score ;
   IF sc < 0 OR sc > 100 THEN
      SET rs = 'score error';
   ELSEIF sc > 80 THEN
      SET rs = 'A';
   ELSEIF sc > 60 THEN
      SET rs = 'B';
   ELSE
      SET rs = 'C';
   END IF ;
END $$
-- 調(diào)用
SET @a1 =60;
SET @a2 = '';
CALL testproce(@a1,@a2);
SELECT @a2 ;
-- 

3.while的簡(jiǎn)單應(yīng)用

--  代碼

DELIMITER $$
CREATE PROCEDURE proc_add_looply(IN $className VARCHAR(200),INOUT $insertTimes INT)
BEGIN
    WHILE $insertTimes>0 DO
        INSERT INTO classes VALUES(DEFAULT,$className);
        SET $insertTimes = $insertTimes - 1 ;
    END WHILE;
    COMMIT;
END $$
-- 調(diào)用
SET @lp_1 = '班' ;
SET @lp_2 = 5 ;
CALL proc_add_looply(@lp_1,@lp_2);
--

4.用數(shù)據(jù)庫(kù)中的數(shù)據(jù)賦值

--  代碼

DELIMITER $$
CREATE PROCEDURE show_job_dept(IN no2 INT,OUT job2 VARCHAR(100),OUT dno2 INT)
BEGIN
    SELECT job,deptno INTO job2,dno2 FROM emp WHERE EMPNO = no2;
END $$
-- 調(diào)用
SET @sjd_1 = 7369;
SET @sjd_2 = '';
SET @sjd_3 = 0;
CALL show_job_dept(@sjd_1,@sjd_2,@sjd_3);
SELECT @sjd_2 ;
SELECT @sjd_3 ;
--

到此這篇關(guān)于Mysql的 存儲(chǔ)過(guò)程(procedure)的文章就介紹到這了,更多相關(guān)Mysql 存儲(chǔ)過(guò)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論