triggers_08.inc

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

INC
559
字号
	--enable_warnings#Section 3.5.8.5 (CASE)# Test case: Ensure that the stored procedure-specific flow control statement#            like CASE works correctly when it is a part of the triggered action#            portion of a trigger definition.let $message= Testcase 3.5.8.5-case:;--source include/show_msg.inc		delimiter //;	create trigger trg3 before insert on tb3 for each row	BEGIN		SET new.f120=char(ascii(new.f120)-32);		CASE			when new.f136<100 then set new.f136=new.f136+120;			when new.f136<10 then set new.f144=777;			when new.f136>100 then set new.f120=new.f136-1;		END case;		CASE			when new.f136=200 then set @test_var=CONCAT(new.f120, '=');			ELSE set @test_var=concat(new.f120, '*');		END case;		CASE new.f144			when 1 then set @test_var=concat(@test_var, 'one');			when 2 then set @test_var=concat(@test_var, 'two');			when 3 then set @test_var=concat(@test_var, 'three');			when 4 then set @test_var=concat(@test_var, 'four');			when 5 then set @test_var=concat(@test_var, 'five');			when 6 then set @test_var=concat(@test_var, 'six');			when 7 then set @test_var=concat(@test_var, 'seven');			when 8 then set @test_var=concat(@test_var, 'eight');			when 9 then set @test_var=concat(@test_var, 'nine');			when 10 then set @test_var=concat(@test_var, 'ten');			when 11 then set @test_var=concat(@test_var, 'eleven');			when 12 then set @test_var=concat(@test_var, 'twelve');			when 13 then set @test_var=concat(@test_var, 'thirteen');			when 14 then set @test_var=concat(@test_var, 'fourteen');			when 15 then set @test_var=concat(@test_var, 'fifteen');			ELSE set @test_var=CONCAT(new.f120, '*', new.f144);		END case;	END//	delimiter ;//	set @test_var='Empty';	Insert into tb3 (f120, f122, f136, f144)		values ('a', 'Test 3.5.8.5-case', 5, 7);	select f120, f122, f136, f144, @test_var		from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;	Insert into tb3 (f120, f122, f136, f144)		values ('b', 'Test 3.5.8.5-case', 71,16);	select f120, f122, f136, f144, @test_var		from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;	Insert into tb3 (f120, f122, f136, f144)		values ('c', 'Test 3.5.8.5-case', 80,1);	select f120, f122, f136, f144, @test_var		from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;	Insert into tb3 (f120, f122, f136)		values ('d', 'Test 3.5.8.5-case', 152);	select f120, f122, f136, f144, @test_var		from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;	Insert into tb3 (f120, f122, f136, f144)		values ('e', 'Test 3.5.8.5-case', 200, 8);	select f120, f122, f136, f144, @test_var		from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;	--error 0, ER_SP_CASE_NOT_FOUND	Insert into tb3 (f120, f122, f136, f144)		values ('f', 'Test 3.5.8.5-case', 100, 8);	select f120, f122, f136, f144, @test_var		from tb3 where f122 = 'Test 3.5.8.5-case' order by f120,f136;	delimiter //;	--error ER_PARSE_ERROR	create trigger trg3a before update on tb3 for each row	BEGIN		CASE			when new.f136<100 then set new.f120='p';	END//	delimiter ;//	--error 0, ER_TRG_DOES_NOT_EXIST	drop trigger trg3a;#Cleanup	--disable_warnings	drop trigger trg3;	delete from tb3 where f121='Test 3.5.8.5-case';		--enable_warnings#Section 3.5.8.5 (LOOP)# Test case: Ensure that the stored procedure-specific flow control#            statement like LOOP / LEAVE work correctly when they are#            part of the triggered action portion of a trigger definition.let $message= Testcase 3.5.8.5-loop/leave:;--source include/show_msg.inc			delimiter //;	Create trigger trg4 after insert on tb3 for each row	BEGIN		set @counter=0, @flag='Initial';		Label1: loop			if new.f136<new.f144 then				set @counter='Nothing to loop';				leave Label1;			else				set @counter=@counter+1;				if new.f136=new.f144+@counter then					set @counter=concat(@counter, ' loops');					leave Label1;				end if;			end if;			iterate label1;			set @flag='Final';		END loop Label1;	END//	delimiter ;//	Insert into tb3 (f122, f136, f144)		values ('Test 3.5.8.5-loop', 2, 8);		select @counter, @flag;	Insert into tb3 (f122, f136, f144)		values ('Test 3.5.8.5-loop', 11, 8);		select @counter, @flag;	delimiter //;	--error ER_PARSE_ERROR	Create trigger trg4_2 after update on tb3 for each row	BEGIN		Label1: loop			set @counter=@counter+1;		END;	END//	delimiter ;//	--error 0, ER_TRG_DOES_NOT_EXIST	drop trigger trg4_2;#Cleanup	--disable_warnings	drop trigger trg4;	delete from tb3 where f122='Test 3.5.8.5-loop';	--enable_warnings#Section 3.5.8.5 (REPEAT ITERATE)#Testcase: Ensure that the stored procedure-specific flow control statements#          like REPEAT work correctly when they are part of the triggered action#          portion of a trigger definition.let $message= Testcase 3.5.8.5-repeat:;--source include/show_msg.inc				delimiter //;	Create trigger trg6 after insert on tb3 for each row	BEGIN		rp_label: REPEAT			SET @counter1 = @counter1 + 1;			IF (@counter1 MOD 2 = 0) THEN ITERATE rp_label; 				END IF;			SET @counter2 = @counter2 + 1;		UNTIL @counter1> new.f136 END REPEAT rp_label;	END//	delimiter ;//	set @counter1= 0, @counter2= 0;	Insert into tb3 (f122, f136)		values ('Test 3.5.8.5-repeat', 13);	select @counter1, @counter2;				delimiter //;	--error ER_PARSE_ERROR	Create trigger trg6_2 after update on tb3 for each row	BEGIN		REPEAT			SET @counter2 = @counter2 + 1;	END//	delimiter ;//#Cleanup				--disable_warnings	drop trigger trg6;	delete from tb3 where f122='Test 3.5.8.5-repeat';	--enable_warnings#Section 3.5.8.5 (WHILE)# Test case: Ensure that the stored procedure-specific flow control#            statements WHILE, work correctly when they are part of#            the triggered action portion of a trigger definition.let $message= Testcase 3.5.8.5-while:;--source include/show_msg.inc	delimiter //;	Create trigger trg7 after insert on tb3 for each row		wl_label: WHILE @counter1 < new.f136 DO			SET @counter1 = @counter1 + 1;			IF (@counter1 MOD 2 = 0) THEN ITERATE wl_label; 				END IF;			SET @counter2 = @counter2 + 1;		END WHILE wl_label//	delimiter ;//	set @counter1= 0, @counter2= 0;	Insert into tb3 (f122, f136)		values ('Test 3.5.8.5-while', 7);	select @counter1, @counter2;	delimiter //;	--error ER_PARSE_ERROR	Create trigger trg7_2 after update on tb3 for each row	BEGIN		WHILE @counter1 < new.f136			SET @counter1 = @counter1 + 1;	END//	delimiter ;//#Cleanup	--disable_warnings	delete from tb3 where f122='Test 3.5.8.5-while';	drop trigger trg7;	--enable_warnings#Section 3.5.8.6# Test case: Ensure that a trigger definition that includes a CALL to a stored#            procedure fails, at CREATE TRIGGER time, with an appropriate error#            message. Not more valid requirement.let $message= Testcase 3.5.8.6: (requirement void);--source include/show_msg.inc	delimiter //;	CREATE PROCEDURE sp_01 () BEGIN set @v1=1; END//	CREATE TRIGGER trg8_1 BEFORE UPDATE ON tb3 FOR EACH ROW	BEGIN		CALL sp_01 ();	END//	delimiter ;//	Insert into tb3 (f120, f122, f136) values ('6', 'Test 3.5.8.6-insert', 101);	update tb3 set f120='S', f136=111,	       f122='Test 3.5.8.6-tr8_1'	       where f122='Test 3.5.8.6-insert';	select f120, f122	       from tb3 where f122  like 'Test 3.5.8.6%' order by f120;	DROP TRIGGER trg8_1;	DROP PROCEDURE sp_01;#Section 3.5.8.7# Test case: Ensure that a trigger definition that includes a#            transaction-delimiting statement (e.g. COMMIT,#            ROLLBACK, START TRANSACTION) fails, at CREATE TRIGGER#            time, with an appropriate error message.let $message= Testcase 3.5.8.7;--source include/show_msg.inc		delimiter //;	--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG	Create trigger trg9_1 before update on tb3 for each row	BEGIN		Start transaction;			Set new.f120='U';		Commit;	END//	--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG	Create trigger trg9_2 before delete on tb3 for each row	BEGIN		Start transaction;			Set @var2=old.f120;		Rollback;	END//	delimiter ;//# Cleanup section 3.5	connection default;	drop user test_general@localhost;	drop user test_general;	drop user test_super@localhost;DROP TABLE test.tb3;

⌨️ 快捷键说明

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