storedproc_03.inc

来自「这个文件是windows mysql源码」· INC 代码 · 共 497 行 · 第 1/2 页

INC
497
字号
DROP TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742;# ------------------------------------------------------------------------------let $message= Testcase 3.1.3.16:;--source include/show_msg.inclet $message=Ensure that the ITERATE statement acts correctly for all variants, includingcases where statements are nested.(tests for this testcase are also included in other testcases);--source include/show_msg80.inc--disable_warningsDROP PROCEDURE IF EXISTS sp31316;--enable_warningsdelimiter //;# wrong label at iterate# Error: SQLSTATE: 42000 (ER_SP_LILABEL_MISMATCH)#        Message: %s with no matching label: %s--error ER_SP_LILABEL_MISMATCHCREATE PROCEDURE sp31316( )BEGIN   declare count1 integer default 1;   declare count2 integer default 1;   label1: loop      if count2 > 3 then leave label1;      END if;      set count1 = 1;      label2: loop         if count1 > 4 then leave label2;         END if;         insert into temp values( count1, count2);         set count1 = count1 + 1;         iterate label3;      END loop label2;      set count2 = count2 + 1;      iterate label1;   END loop label1;END//delimiter ;//# cleanup 3.1.3.16#DROP PROCEDURE sp31316;# ------------------------------------------------------------------------------let $message= Testcase 3.1.3.18:;--source include/show_msg.inclet $message=Ensure that the REPEAT statement acts correctly for all variants, includingcases where statements are nested.;--source include/show_msg80.inc--disable_warningsDROP PROCEDURE IF EXISTS sp17;DROP TABLE IF EXISTS res_t3_itisalongname_1381742_itsaverylongname_1381742;--enable_warningsCREATE TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 CHAR(20), f2 VARCHAR(20), f3 SMALLINT);delimiter //;CREATE PROCEDURE sp17( )BEGIN   declare count1 integer default 1;   declare count2 integer default 1;   repeat      set count1 = count1 + 1;      set count2 = 1;      label1: repeat         set count2 = count2 + 1;         insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'xyz' , 'pqr', count1);         until count2 > 3      END repeat label1;      until count1 > 3   END repeat;END//delimiter ;//CALL sp17();SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;# cleanup 3.1.3.18DROP PROCEDURE sp17;DROP TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742;# ------------------------------------------------------------------------------let $message= Testcase 3.1.3.24:;--source include/show_msg.inclet $message=Ensure that the WHILE statement acts correctly for all variants, including caseswhere statements are nested.;--source include/show_msg80.inc--disable_warningsdrop table IF EXISTS res_t21;DROP PROCEDURE IF EXISTS sp21;--enable_warningscreate table res_t21(name text(10), surname blob(20), age_averylongfieldname_averylongname_1234569 smallint);insert into res_t21 values('ashwin', 'mokadam', 25);delimiter //;CREATE PROCEDURE sp21( )BEGIN   declare count1 integer default 0;   declare count2 integer default 0;   while count1 < 3 do      BEGIN         declare ithisissamevariablename int default 100;         SELECT ithisissamevariablename;         BEGIN            declare ithisissamevariablename int default 200;            SELECT ithisissamevariablename;         END;         set count2 = 0;         label1: while count2 < 3 do            BEGIN               declare count1 integer default 7;               set count2 = count2 + 1;               insert into res_t21 values( 'xyz' , 'pqr', count2);               label2: while count1 < 10 do                  set count1 = count1 + 1;                  insert into res_t21 values( 'xyz' , 'pqr', count1);               END while label2;            END;         END while label1;         set count1 = count1 + 1;      END;   END while;END//delimiter ;//CALL sp21();SELECT * from res_t21;# cleanup 3.1.3.DROP PROCEDURE sp21;drop table res_t21;# ------------------------------------------------------------------------------let $message= Testcase 3.1.3.30:;--source include/show_msg.inclet $message=Ensure that multiple cases of all possible combinations of the control flowstatements, nested within multiple compound statements within a storedprocedure, always act correctly and return the expected result.;--source include/show_msg80.inc--disable_warningsDROP TABLE IF EXISTS res_tbl;DROP PROCEDURE IF EXISTS sp31330;--enable_warningscreate table res_tbl (f1 int, f2 text, f3 blob, f4 date,      f5 set('one', 'two', 'three', 'four', 'five') default 'one');delimiter //;#FIXME: can be enhanced more and more ...CREATE PROCEDURE sp31330 (path int)BEGIN   declare count int default 1;   declare var1 text;   declare var2 blob;   declare var3 date;   declare var4 set('one', 'two', 'three', 'four', 'five') DEFAULT 'five';   case      when path=1 then         set var3 = '2000-11-09';         set var1 = 'flowing through case 1';         label1: loop            if count > 5 then               if var4=1000 then                  set var2 = 'exiting out of case 1 - invalid SET';               END if;               if var4='two' then                  set var2 = 'exiting out of case 1';               END if;               insert into res_tbl values (1, var1, var2, var3, (count-2));               leave label1;            elseif count = 5 then               set count= count + 2;               set var4='two';               iterate label1;            else               set count= count + 1;            END if;            set var4='one';         END loop label1;      when path=2 then         set var3 = '1989-11-09';         set var1 = 'flowing through case 2';         set @count3=0;         label2: repeat            set count=count + 1;            set @count2=1;            while @count2 <= 5 do               set @count2 = @count2 + 1;            END while;            SELECT @count2;            set @count3=@count3 + @count2;            until count > 5         END repeat label2;         set var2 = 'exiting out of case 2';         set var4 = count-3;         SELECT @count3;         insert into res_tbl values (2, var1, var2, var3, var4);      ELSE BEGIN         set @error_opt='undefined path specified';         SELECT @error_opt;      END;   END case;END//delimiter ;//# Error: SQLSTATE: 42000 (ER_SP_WRONG_NO_OF_ARGS)#        Message: Incorrect number of arguments for %s %s; expected %u, got %u--error ER_SP_WRONG_NO_OF_ARGSCALL sp31330();CALL sp31330(1);SELECT * from res_tbl;CALL sp31330(2);SELECT * from res_tbl;CALL sp31330(4);# cleanup 3.1.3.30DROP PROCEDURE sp31330;drop table res_tbl;# ==============================================================================# USE the same .inc to cleanup before and after the test--source suite/funcs_1/storedproc/cleanup_sp_tb.inc# ==============================================================================--echo--echo .                               +++ END OF SCRIPT +++--echo --------------------------------------------------------------------------------# ==============================================================================

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?