日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

存储过程详解与实例

發(fā)布時(shí)間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 存储过程详解与实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

存儲(chǔ)過(guò)程

1、存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 通過(guò)把處理封裝在容易使用的單元中,簡(jiǎn)化復(fù)雜的操作;
  • 簡(jiǎn)化對(duì)變動(dòng)的管理;
  • 通常存儲(chǔ)過(guò)程有助于提高應(yīng)用程序的性能;
  • 存儲(chǔ)過(guò)程有助于減少應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器之間的流量,因?yàn)閼?yīng)用程序不必發(fā)送多個(gè)冗長(zhǎng)的 SQL 語(yǔ)句,而只用發(fā)送存儲(chǔ)過(guò)程的名稱和參數(shù);
  • 存儲(chǔ)的程序?qū)θ魏螒?yīng)用程序都是可重用的和透明的。
  • 存儲(chǔ)的程序是安全的。
    缺點(diǎn)
  • 如果使用大量存儲(chǔ)過(guò)程,那么使用這些存儲(chǔ)過(guò)程的每個(gè)連接的內(nèi)存使用量將會(huì)大大增加。
  • 存儲(chǔ)過(guò)程的構(gòu)造使得開發(fā)具有復(fù)雜業(yè)務(wù)邏輯的存儲(chǔ)過(guò)程變得更加困難;
  • 很難調(diào)試存儲(chǔ)過(guò)程。只有少數(shù)數(shù)據(jù)庫(kù)管理系統(tǒng)允許您調(diào)試存儲(chǔ)過(guò)程。
  • 開發(fā)和維護(hù)存儲(chǔ)過(guò)程并不容易。開發(fā)和維護(hù)存儲(chǔ)過(guò)程通常需要一個(gè)不是所有應(yīng)用程序開發(fā)人員擁有的專業(yè)技能。這可能會(huì)導(dǎo)致應(yīng)用程序開發(fā)和維護(hù)階段的問(wèn)題。
    創(chuàng)建與調(diào)用過(guò)程
  • -- 創(chuàng)建存儲(chǔ)過(guò)程 create procedure mypro(in a int,in b int,out sum int) begin set sum = a+b; end;

    運(yùn)行結(jié)果如下:

    調(diào)用存儲(chǔ)過(guò)程,代碼如下所示:

    call mypro(1,2,@s);-- 調(diào)用存儲(chǔ)過(guò)程 select @s;-- 顯示過(guò)程輸出結(jié)果

    運(yùn)行結(jié)果如下:

    存儲(chǔ)過(guò)程語(yǔ)法解析
    create procedure 用來(lái)創(chuàng)建過(guò)程;
    mypro 用來(lái)定義過(guò)程名稱;
    (in a int,in b int,out sum int)表示過(guò)程的參數(shù),其中 in 表示輸入?yún)?shù),out 表示輸出參數(shù)。類似于 Java 定義方法時(shí)的形參和返回值;
    begin 與 end 表示過(guò)程主體的開始和結(jié)束,相當(dāng)于 Java 定義方法的一對(duì)大括號(hào);
    call 用來(lái)調(diào)用過(guò)程,@s 是用來(lái)接收過(guò)程輸出參數(shù)的變量。
    存儲(chǔ)過(guò)程的參數(shù)
    IN 輸入?yún)?shù):表示調(diào)用者向過(guò)程傳入值(傳入值可以是字面量或變量);
    OUT 輸出參數(shù):表示過(guò)程向調(diào)用者傳出值(可以返回多個(gè)值)(傳出值只能是變量);
    INOUT 輸入輸出參數(shù):既表示調(diào)用者向過(guò)程傳入值,又表示過(guò)程向調(diào)用者傳出值(值只能是變量);
    聲明變量

    DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

    declare 用于聲明變量;
    variable_name 表示變量名稱;
    datatype 為 MySQL 的數(shù)據(jù)類型;
    default 用于聲明默認(rèn)值;
    例如:declare name varchar(20) default ‘jack’。
    變量賦值

    SET 變量名 = 表達(dá)式值 [,variable_name = expression ...]

    在存儲(chǔ)過(guò)程中使用變量,代碼如下所示:

    use schooldb;-- 使用 schooldb 數(shù)據(jù)庫(kù) -- 創(chuàng)建過(guò)程 create procedure mypro1() begin declare name varchar(20); set name = '丘處機(jī)'; select * from studentinfo where studentname = name; end; -- 調(diào)用過(guò)程 call mypro1();

    運(yùn)行結(jié)果如下:

    流程控制語(yǔ)句

  • if 條件語(yǔ)句
    IF 語(yǔ)句包含多個(gè)條件判斷,根據(jù)結(jié)果為 TRUE、FALSE 執(zhí)行語(yǔ)句,與編程語(yǔ)言中的 if、else if、else 語(yǔ)法類似。
    定義存儲(chǔ)過(guò)程,輸入一個(gè)整數(shù),使用 if 語(yǔ)句判斷是正數(shù)還是負(fù)數(shù),代碼如下所示:
  • -- 創(chuàng)建過(guò)程 create procedure mypro2(in num int) begin if num<0 then -- 條件開始 select '負(fù)數(shù)'; elseif num=0 then select '不是正數(shù)也不是負(fù)數(shù)'; else select '正數(shù)'; end if;-- 條件結(jié)束 end; -- 調(diào)用過(guò)程 call mypro2(-1);

    運(yùn)行結(jié)果如下:

    2、case 條件語(yǔ)句
    case 是另一個(gè)條件判斷的語(yǔ)句,類似于編程語(yǔ)言中的 choose、when 語(yǔ)法。MySQL 中的 case 語(yǔ)句有兩種語(yǔ)法
    格式。
    定義存儲(chǔ)過(guò)程,輸入一個(gè)整數(shù),使用 case 語(yǔ)句判斷是正數(shù)還是負(fù)數(shù),代碼如下所示:

    -- 創(chuàng)建過(guò)程 create procedure mypro3(in num int) begin case -- 條件開始 when num<0 then select '負(fù)數(shù)'; when num=0 then select '不是正數(shù)也不是負(fù)數(shù)'; else select '正數(shù)'; end case; -- 條件結(jié)束 end; -- 調(diào)用過(guò)程 call mypro3(1);


    定義存儲(chǔ)過(guò)程,輸入一個(gè)整數(shù),使用 case 語(yǔ)句判斷是 1 還是 2,代碼如下所示

    -- 創(chuàng)建過(guò)程 create procedure mypro4(in num int) begin case num -- 條件開始 when 1 then select '數(shù)值是 1'; when 2 then select '數(shù)值是 2'; else select '不是 1 也不是 2'; end case; -- 條件結(jié)束 end; -- 調(diào)用過(guò)程 call mypro4(3);

    運(yùn)行結(jié)果如下:

    3、 while 循環(huán)語(yǔ)句
    定義存儲(chǔ)過(guò)程,使用 while 循環(huán)輸出 1 到 10 的累加和,代碼如下所示:

    -- 創(chuàng)建過(guò)程 create procedure mypro5(out sum int) begindeclare num int default 0;set sum = 0;while num<10 do -- 循環(huán)開始set num = num+1;set sum = sum+num;end while; -- 循環(huán)結(jié)束 end; -- 調(diào)用過(guò)程 call mypro5(@sum); -- 查詢變量值 select @sum;


    4、repeat 循環(huán)語(yǔ)句
    repeat 語(yǔ)句的用法和 java 中的 do…while 語(yǔ)句類似,都是先執(zhí)行循環(huán)操作,再判斷條件,區(qū)別是 repeat 表達(dá)
    式值為 false 時(shí)才執(zhí)行循環(huán)操作,直到表達(dá)式值為 true 停止。
    定義存儲(chǔ)過(guò)程,使用 repeat 循環(huán)輸出 1 到 10 的累加和,代碼如下所示:

    -- 創(chuàng)建過(guò)程 create procedure mypro6(out sum int) begin declare num int default 0; set sum = 0; repeat-- 循環(huán)開始 set num = num+1; set sum = sum+num; until num>=10 end repeat; -- 循環(huán)結(jié)束 end; -- 調(diào)用過(guò)程 call mypro6(@sum); -- 查詢變量值 select @sum;


    5、loop 循環(huán)語(yǔ)句
    循環(huán)語(yǔ)句,用來(lái)重復(fù)執(zhí)行某些語(yǔ)句。執(zhí)行過(guò)程中可使用 leave 語(yǔ)句或 iterate 跳出循環(huán),也可以嵌套 IF 等判斷
    語(yǔ)句。
    定義存儲(chǔ)過(guò)程,使用 loop 循環(huán)輸出 1 到 10 的累加和,代碼如下所示:

    -- 創(chuàng)建過(guò)程 create procedure mypro7(out sum int) begin declare num int default 0; set sum = 0; loop_sum:loop-- 循環(huán)開始 set num = num+1; set sum = sum+num; if num>=10 then leave loop_sum; end if; end loop loop_sum; -- 循環(huán)結(jié)束 end; -- 調(diào)用過(guò)程 call mypro7(@sum); -- 查詢變量值 select @sum;


    存儲(chǔ)過(guò)程的管理

    -- 顯示存儲(chǔ)過(guò)程 SHOW PROCEDURE STATUS; -- 顯示特定數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程,代碼如下所示 SHOW PROCEDURE status where db = 'schooldb'; -- :顯示特定模式的存儲(chǔ)過(guò)程,要求顯示名稱中包含“my”的存儲(chǔ)過(guò)程,代碼如下所示 SHOW PROCEDURE status where name like '%my%'; -- 顯示存儲(chǔ)過(guò)程源碼 SHOW CREATE PROCEDURE mypro1; -- 刪除存儲(chǔ)過(guò)程 drop PROCEDURE mypro1;

    總結(jié)

    以上是生活随笔為你收集整理的存储过程详解与实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。