• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件測試中Mysql存儲過程實例

    發布: 2010-7-19 11:10 | 作者: 網絡轉載 | 來源: 領測軟件測試網采編 | 查看: 266次 | 進入軟件測試論壇討論

    領測軟件測試網

    軟件測試中Mysql存儲過程實例

    實例說明
    為了保證數據的完整性、一致性,提高應用的性能,常采用存儲過程技術。MySQL 5.0之前的版本并不支持存儲過程,隨著MySQL技術的日趨完善,存儲過程將在以后的項目中得到廣泛的應用。本實例將介紹在MySQL 5.0以后的版本中創建存儲過程。
    技術要點
    一個存儲過程包括名字、參數列表,以及可以包括很多SQL語句的SQL語句集。下面為一個存儲過程的定義過程:
    create procedure proc_name (in parameter integer)
    begin
    declare variable varchar(20);
    if parameter=1 then
    set variable='MySQL';
    else
    set variable='PHP';
    end if;
    insert into tb (name) values (variable);
    end;  
        MySQL中存儲過程的建立以關鍵字create procedure開始,后面緊跟存儲過程的名稱和參數。MySQL的存儲過程名稱不區分大小寫,例如PROCE1()和proce1()代表同一個存儲過程名。存儲過程名不能與MySQL數據庫中的內建函數重名。
        存儲過程的參數一般由3部分組成。第一部分可以是in、out或inout。in表示向存儲過程中傳入參數;out表示向外傳出參數;inout表示定義的參數可傳入存儲過程,并可以被存儲過程修改后傳出存儲過程,存儲過程默認為傳入參數,所以參數in可以省略。第二部分為參數名。第三部分為參數的類型,該類型為MySQL數據庫中所有可用的字段類型,如果有多個參數,參數之間可以用逗號進行分割。
        MySQL存儲過程的語句塊以begin開始,以end結束。語句體中可以包含變量的聲明、控制語句、SQL查詢語句等。由于存儲過程內部語句要以分號結束,所以在定義存儲過程前應將語句結束標志“;”更改為其他字符,并且該字符在存儲過程中出現的幾率也應該較低,可以用關鍵字delimiter更改。例如:
    mysql>delimiter //
    存儲過程創建之后,可用如下語句進行刪除,參數proc_name指存儲過程名。
    drop procedure proc_name
    實現過程
    (1)MySQL存儲過程是在“命令提示符”下創建的,所以首先應該打開“命令提示符”窗口。
    (2)進入“命令提示符”窗口后,首先應該登錄MySQL數據庫服務器,在“命令提示符”下輸入如下命令:
    (3)更改語句結束符號,本實例將語句結束符更改為“//”。代碼如下:
    (4)創建存儲過程前應首先選擇某個數據庫。代碼如下:
    (5)創建存儲過程。
    (6)通過call語句調用存儲過程。
    ## **********first test,procedure**********
    #<1>
    use testprocedure;

    delimiter //


    create procedure simpleproce1 (out par1 int)
    begin
    select count(*) into par1 from proce;
    end
    //

    delimiter ;
    call simpleproce1(@a);

    select @a;

    #<2>,每次只有單一的行可以被取回select id,name into par1,par2 from proce LIMIT 1;中的LIMIT 1;

    use testprocedure;

    delimiter //

    DROP procedure IF EXISTS simpleproce2

    create procedure simpleproce2 (out par1 int,out par2 char(30))
    begin
    select id,name into par1,par2 from proce LIMIT 1;
    end
    //

    delimiter ;
    call simpleproce2(@a,@b);

    select @a,@b;


    ## *********second test,function************
    #<3>
    delimiter //

    DROP FUNCTION IF EXISTS hello
    //

    create function hello(s char(20)) returns char(50)
    return concat('Hello, ',s,'!');
    //

    delimiter ;
    select hello('world');

    show create function testprocedure.hello\G

    #它返回子程序的特征,如數據庫,名字,類型,創建者及創建和修改日期
    show function status like 'hello'\G

    #<4>
    #注意name不能和字段名相同
    delimiter //
    DROP procedure IF EXISTS test //

    CREATE PROCEDURE test ()
    BEGIN
        DECLARE name VARCHAR(5) DEFAULT 'bob';
        DECLARE newname VARCHAR(5);
        DECLARE xid INT;
       
        SELECT name,id INTO newname,xid
          FROM proce WHERE name = name;
        SELECT newname;
    END;
    //

    call test1() //

    #***
    delimiter //
    DROP procedure IF EXISTS test2 //

    CREATE PROCEDURE test2 ()
    BEGIN
       
        DECLARE newname VARCHAR(5);
        DECLARE xid INT;
       
        SELECT name,id INTO newname,xid
          FROM proce limit 1;
        SELECT newname,xid;
    END;
    //

    call test2() //

    #<5>
    use testprocedure;
    CREATE PROCEDURE p1 () SELECT * FROM proce;

    call p1();

    #<6>注意此處的handler是設置SQLSTATE值,SQLWARNING是對所有以01開頭的SQLSTATE代碼的速記
    #NOT FOUND是對所有以02開頭的SQLSTATE代碼的速記
    #SQLEXCEPTION是對所有沒有被SQLWARNING或NOT FOUND捕獲的SQLSTATE代碼的速記
    #DECLARE CONTINUE HANDLER聲明CONTINUE異常處理
    #事實上這里的23000SQLSTATE是更常用的,當外鍵約束出錯或主鍵約束出錯就被調用了。
    #當沒有發生該23000異常時, select @x2的值將是null,而不是1,
    #并且后面的第2個語句執行時將會報主鍵約束錯誤,此時@x2=1,@x=4,雖然第2句有了異常,但是后面的語句繼續執行
    #保存到數據的數據是3,test3和5,test5

    use testprocedure;
    delimiter //
    DROP procedure IF EXISTS handlerdemo
    //

    create procedure handlerdemo()
    begin
    declare continue handler for sqlstate '23000' set @x2=1;
    set @x=1;
    insert into proce values(3,'test3');
    set @x=2;
    insert into proce values(3,'test4');
    set @x=3;
    insert into proce values(5,'test5');
    set @x=4;
    end;
    //

    call handlerdemo()//

    select @x //
    select @x2 //

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: MySQL Mysql mysql mySQL MYSQL MySql MYsql 軟件測試 實例

    21/212>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>