• <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 | 作者: 網絡轉載 | 來源: 領測軟件測試網采編 | 查看: 237次 | 進入軟件測試論壇討論

    領測軟件測試網

    ## ************光標****************
    #<7>光標必須在聲明處理程序之前被聲明,并且變量和條件必須在聲明光標或處理程序之前被聲明
    #在這里先聲明變量a,b,c,后聲明cursor
    create procedure curdemo()
    begin
    declare done int default 0;
    declare a char(16);
    declare b,c int;
    declare cur1 cursor for select id,name from proce;
    declare cur2 cursor for select id from proce2;
    declare continue handler for sqlstate '02000' set done=1;

    open cur1;
    open cur2;

    repeat
    fetch cur1 into b,a;
    fetch cur2 into c;
    if not done then
       if b<c then
         insert into proce3 values(b,a);
       else
         insert into proce3 values(c,a);
       end if;
    end if;
    until done end repeat;

    close cur1;
    close cur2;
    end

    ## **************** Case *******************
    #<8>when ... then ;case ... end case;
    delimiter //
    DROP procedure IF EXISTS p13
    //
    create procedure p13(in par1 int)
    begin
    declare var1 int;
    set var1=par1+1;

    case var1
    when 0 then insert into casetest values(17);
    when 1 then insert into casetest values(18);
    else insert into casetest values(19);
    end case;
    end;
    //

    call p13(-1)//
    call p13(0)//
    call p13(1)//
    call p13(null)//


    ## **************** while ****************
    #<9>while ... do ... end while;為了防止null的錯誤,set v=0是必須的
    delimiter //
    DROP procedure IF EXISTS p14
    //

    create procedure p14()
    begin
    declare v int;
    set v=0;
    while v < 5 do
          insert into casetest values (v);
          set v=v+1;
    end while;
    end;//

    call p14()//

    ## ***************** repeat *****************
    #<10>repeat ...until ... end repeat; 是執行后檢查(until v>=5),而while是執行前檢查(while v<5)
    delimiter //
    DROP procedure IF EXISTS p15
    //

    create procedure p15()
    begin
    declare v int;
    set v=0;
    repeat
        insert into casetest values(v);
        set v=v+1;
    until v >=5

    end repeat;

    end;
    //

    call p15()//

    ## ***************** loops *****************
    #<11> loop 和while一樣不需要初始條件,同時和repeat一樣不需要結束條件
    #      loop_label: loop
    #      ...
    #       if .. then
    #       leave loop_label
    #       end if
    #      end loop

    delimiter //
    DROP procedure IF EXISTS p16
    //

    create procedure p16()
    begin
    declare v int;
    set v=0;
    loop_label: loop
        insert into casetest values(v);
        set v=v+1;
        if v >=5 then
          leave loop_label;
        end if;
    end loop;
    end;//

    call p16()//

    ## ***************** Labels *****************
    # <12>labels標號; 注意此處的until 0=0后面沒有分號“;”
    delimiter //
    DROP procedure IF EXISTS p17//

    create procedure p17()
    label_1:begin

    label_2:while 0=1 do leave label_2; end while;

    label_3:repeat leave label_3;until 0=0 end repeat;

    label_4:loop leave label_4; end loop;

    end;//

    call p17()//

    #<13>labels 標號結束符;
    delimiter //
    DROP procedure IF EXISTS p18//

    create procedure p18()
    label_1:begin

    label_2:while 0=1 do leave label_2; end while label_2;

    label_3:repeat leave label_3;until 0=0 end repeat label_3;

    label_4:loop leave label_4; end loop label_4;

    end label_1;//

    call p18()//

    #<14>leave和labels 跳出和標號;leave 使程序跳出復雜的語句
    delimiter //
    DROP procedure IF EXISTS p19//

    create procedure p19(par char)

    label_1:begin
    label_2:begin
    label_3:begin

    if par is not null then
    if par='a' then leave label_1;
    else
       begin
         if par='b' then
           leave label_2;
         else
           leave label_3;
         end if;
       end;
    end if;
    end if;

    end label_3;
    end label_2;
    end label_1;

    //

    call p19('a')//


    #<15>iterate迭代,必須用leave;iterate意思是重新開始復合語句,相當于 continue
    #該結果中3將不被保存到數據庫表中
    delimiter //
    DROP procedure IF EXISTS p20//

    create procedure p20()
    begin
    declare v int;
    set v=0;
    loop_label:loop

        if v=3 then
          set v=v+1;
          iterate loop_label;
        end if;
        insert into casetest values(v);
        set v=v+1;

        if v>=5 then
          leave loop_label;
        end if;

    end loop loop_label;
    end;//

    call p20()//


    #<16>Grand combination大組合

    delimiter //
    DROP procedure IF EXISTS p21//

    create procedure p21(in par1 int,out par2 int)
    language sql deterministic sql security invoker
    begin
    declare v int;

    label goto_label;

    start_label:loop
        if v=v then
          leave start_label;
        else
          iterate start_label;
        end if;
    end loop start_label;

    repeat
        while 1=0 do begin end;
        end while;
    until v=v
    end repeat;

    goto goto_label;


    end;
    //

    call p21()//

    ## **************** trigger ***************************
    #<17>
    use testprocedure;

    CREATE TABLE trig1(a1 int);
    CREATE TABLE trig2(a2 int);
    CREATE TABLE trig3(a3 int not null AUTO_INCREMENT PRIMARY KEY);

    CREATE TABLE trig4(
    a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    b4 INT DEFAULT 0
    );

    insert into trig3(a3) values(null),(null),(null),(null),(null),(null),(null),(null),(null),(null);
    insert into trig4(a4) values(0),(0),(0),(0),(0),(0),(0),(0),(0),(0);

    delimiter //
    DROP trigger trigtest//

    create trigger trigtest before insert on trig1
    for each row begin
    insert into trig2 set a2=NEW.a1;
    delete from trig3 where a3=NEW.a1;
    update trig4 set b4=b4+1 where a4=NEW.a1;
    end;
    //


    delimiter ;

    延伸閱讀

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

    22/2<12

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(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>