392 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			392 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | drop procedure if exists p1| | ||
|  | drop procedure if exists p2| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | prepare stmt from "select 1"; | ||
|  | execute stmt; | ||
|  | execute stmt; | ||
|  | execute stmt; | ||
|  | deallocate prepare stmt; | ||
|  | end| | ||
|  | call p1()| | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | call p1()| | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | call p1()| | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | 1 | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | execute stmt; | ||
|  | end| | ||
|  | prepare stmt from "call p1()"| | ||
|  | set @SAVE_SP_RECURSION_LEVELS=@@max_sp_recursion_depth| | ||
|  | set @@max_sp_recursion_depth=100| | ||
|  | execute stmt| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | execute stmt| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | execute stmt| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | call p1()| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | call p1()| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | call p1()| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | set @@max_sp_recursion_depth=@SAVE_SP_RECURSION_LEVELS| | ||
|  | call p1()| | ||
|  | ERROR HY000: Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine p1 | ||
|  | call p1()| | ||
|  | ERROR HY000: Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine p1 | ||
|  | call p1()| | ||
|  | ERROR HY000: Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine p1 | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | prepare stmt from "create procedure p2() begin select 1; end"; | ||
|  | execute stmt; | ||
|  | deallocate prepare stmt; | ||
|  | end| | ||
|  | call p1()| | ||
|  | ERROR HY000: This command is not supported in the prepared statement protocol yet | ||
|  | call p1()| | ||
|  | ERROR HY000: This command is not supported in the prepared statement protocol yet | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | prepare stmt from "drop procedure p2"; | ||
|  | execute stmt; | ||
|  | deallocate prepare stmt; | ||
|  | end| | ||
|  | call p1()| | ||
|  | ERROR HY000: This command is not supported in the prepared statement protocol yet | ||
|  | call p1()| | ||
|  | ERROR HY000: This command is not supported in the prepared statement protocol yet | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | prepare stmt_drop from "drop table if exists t1"; | ||
|  | execute stmt_drop; | ||
|  | prepare stmt from "create table t1 (a int)"; | ||
|  | execute stmt; | ||
|  | insert into t1 (a) values (1); | ||
|  | select * from t1; | ||
|  | prepare stmt_alter from "alter table t1 add (b int)"; | ||
|  | execute stmt_alter; | ||
|  | insert into t1 (a,b) values (2,1); | ||
|  | deallocate prepare stmt_alter; | ||
|  | deallocate prepare stmt; | ||
|  | deallocate prepare stmt_drop; | ||
|  | end| | ||
|  | call p1()| | ||
|  | a | ||
|  | 1 | ||
|  | Warnings: | ||
|  | Note	1051	Unknown table 't1' | ||
|  | call p1()| | ||
|  | a | ||
|  | 1 | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | set @tab_name=concat("tab_", replace(curdate(), '-', '_')); | ||
|  | set @drop_sql=concat("drop table if exists ", @tab_name); | ||
|  | set @create_sql=concat("create table ", @tab_name, " (a int)"); | ||
|  | set @insert_sql=concat("insert into ", @tab_name, " values (1), (2), (3)"); | ||
|  | set @select_sql=concat("select * from ", @tab_name);  | ||
|  | select @tab_name; | ||
|  | select @drop_sql; | ||
|  | select @create_sql; | ||
|  | select @insert_sql; | ||
|  | select @select_sql; | ||
|  | prepare stmt_drop from @drop_sql; | ||
|  | execute stmt_drop; | ||
|  | prepare stmt from @create_sql; | ||
|  | execute stmt; | ||
|  | prepare stmt from @insert_sql; | ||
|  | execute stmt; | ||
|  | prepare stmt from @select_sql; | ||
|  | execute stmt; | ||
|  | execute stmt_drop; | ||
|  | deallocate prepare stmt; | ||
|  | deallocate prepare stmt_drop; | ||
|  | end| | ||
|  | call p1()| | ||
|  | call p1()| | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | prepare stmt_drop from "drop table if exists t1"; | ||
|  | execute stmt_drop; | ||
|  | prepare stmt from "create table t1 (a int)"; | ||
|  | execute stmt; | ||
|  | deallocate prepare stmt; | ||
|  | deallocate prepare stmt_drop; | ||
|  | end| | ||
|  | drop function if exists f1| | ||
|  | create function f1(a int) returns int | ||
|  | begin | ||
|  | call p1(); | ||
|  | return 1; | ||
|  | end| | ||
|  | select f1(0)| | ||
|  | ERROR 0A000: Dynamic SQL is not allowed in stored function or trigger | ||
|  | select f1(f1(0))| | ||
|  | ERROR 0A000: Dynamic SQL is not allowed in stored function or trigger | ||
|  | select f1(f1(f1(0)))| | ||
|  | ERROR 0A000: Dynamic SQL is not allowed in stored function or trigger | ||
|  | drop function f1| | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | drop table if exists t1; | ||
|  | create table t1 (id integer not null primary key, | ||
|  | name varchar(20) not null); | ||
|  | insert into t1 (id, name) values (1, 'aaa'), (2, 'bbb'), (3, 'ccc'); | ||
|  | prepare stmt from "select name from t1"; | ||
|  | execute stmt; | ||
|  | select name from t1; | ||
|  | execute stmt; | ||
|  | prepare stmt from | ||
|  | "select name from t1 where name=(select name from t1 where id=2)"; | ||
|  | execute stmt; | ||
|  | select name from t1 where name=(select name from t1 where id=2); | ||
|  | execute stmt; | ||
|  | end| | ||
|  | call p1()| | ||
|  | name | ||
|  | aaa | ||
|  | bbb | ||
|  | ccc | ||
|  | name | ||
|  | aaa | ||
|  | bbb | ||
|  | ccc | ||
|  | name | ||
|  | aaa | ||
|  | bbb | ||
|  | ccc | ||
|  | name | ||
|  | bbb | ||
|  | name | ||
|  | bbb | ||
|  | name | ||
|  | bbb | ||
|  | call p1()| | ||
|  | name | ||
|  | aaa | ||
|  | bbb | ||
|  | ccc | ||
|  | name | ||
|  | aaa | ||
|  | bbb | ||
|  | ccc | ||
|  | name | ||
|  | aaa | ||
|  | bbb | ||
|  | ccc | ||
|  | name | ||
|  | bbb | ||
|  | name | ||
|  | bbb | ||
|  | name | ||
|  | bbb | ||
|  | drop procedure p1| | ||
|  | prepare stmt from "select * from t1"| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | execute stmt; | ||
|  | deallocate prepare stmt; | ||
|  | end| | ||
|  | call p1()| | ||
|  | id	name | ||
|  | 1	aaa | ||
|  | 2	bbb | ||
|  | 3	ccc | ||
|  | call p1()| | ||
|  | ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | declare a char(10); | ||
|  | set a="sp-variable"; | ||
|  | set @a="mysql-variable"; | ||
|  | prepare stmt from "select 'dynamic sql:', @a, a"; | ||
|  | execute stmt; | ||
|  | end| | ||
|  | call p1()| | ||
|  | ERROR 42S22: Unknown column 'a' in 'field list' | ||
|  | call p1()| | ||
|  | ERROR 42S22: Unknown column 'a' in 'field list' | ||
|  | drop procedure p1| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | prepare stmt from 'select ? as a'; | ||
|  | execute stmt using @a; | ||
|  | end| | ||
|  | set @a=1| | ||
|  | call p1()| | ||
|  | a | ||
|  | 1 | ||
|  | call p1()| | ||
|  | a | ||
|  | 1 | ||
|  | drop procedure p1| | ||
|  | drop table if exists t1| | ||
|  | drop table if exists t2| | ||
|  | Warnings: | ||
|  | Note	1051	Unknown table 't2' | ||
|  | create table t1 (id integer primary key auto_increment, | ||
|  | stmt_text char(35), status varchar(20))| | ||
|  | insert into t1 (stmt_text) values | ||
|  | ("select 1"), ("flush tables"), ("handler t1 open as ha"),  | ||
|  | ("analyze table t1"), ("check table t1"), ("checksum table t1"), | ||
|  | ("check table t1"), ("optimize table t1"), ("repair table t1"), | ||
|  | ("describe extended select * from t1"), | ||
|  | ("help help"), ("show databases"), ("show tables"), | ||
|  | ("show table status"), ("show open tables"), ("show storage engines"), | ||
|  | ("insert into t1 (id) values (1)"), ("update t1 set status=''"), | ||
|  | ("delete from t1"), ("truncate t1"), ("call p1()"), ("foo bar"), | ||
|  | ("create view v1 as select 1"), ("alter view v1 as select 2"), | ||
|  | ("drop view v1"),("create table t2 (a int)"),("alter table t2 add (b int)"), | ||
|  | ("drop table t2")| | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | declare v_stmt_text varchar(255); | ||
|  | declare v_id integer; | ||
|  | declare done int default 0; | ||
|  | declare c cursor for select id, stmt_text from t1; | ||
|  | declare continue handler for 1295 -- ER_UNSUPPORTED_PS | ||
|  | set @status='not supported'; | ||
|  | declare continue handler for 1064 -- ER_SYNTAX_ERROR | ||
|  | set @status='syntax error'; | ||
|  | declare continue handler for sqlstate '02000' set done = 1; | ||
|  | prepare update_stmt from "update t1 set status=? where id=?"; | ||
|  | open c; | ||
|  | repeat | ||
|  | if not done then | ||
|  | fetch c into v_id, v_stmt_text; | ||
|  | set @id=v_id, @stmt_text=v_stmt_text; | ||
|  | set @status="supported"; | ||
|  | prepare stmt from @stmt_text; | ||
|  | execute update_stmt using @status, @id; | ||
|  | end if; | ||
|  | until done end repeat; | ||
|  | deallocate prepare update_stmt; | ||
|  | end| | ||
|  | call p1()| | ||
|  | select * from t1| | ||
|  | id	stmt_text	status | ||
|  | 1	select 1	supported | ||
|  | 2	flush tables	supported | ||
|  | 3	handler t1 open as ha	not supported | ||
|  | 4	analyze table t1	supported | ||
|  | 5	check table t1	not supported | ||
|  | 6	checksum table t1	supported | ||
|  | 7	check table t1	not supported | ||
|  | 8	optimize table t1	supported | ||
|  | 9	repair table t1	supported | ||
|  | 10	describe extended select * from t1	supported | ||
|  | 11	help help	not supported | ||
|  | 12	show databases	supported | ||
|  | 13	show tables	supported | ||
|  | 14	show table status	supported | ||
|  | 15	show open tables	supported | ||
|  | 16	show storage engines	supported | ||
|  | 17	insert into t1 (id) values (1)	supported | ||
|  | 18	update t1 set status=''	supported | ||
|  | 19	delete from t1	supported | ||
|  | 20	truncate t1	supported | ||
|  | 21	call p1()	supported | ||
|  | 22	foo bar	syntax error | ||
|  | 23	create view v1 as select 1	supported | ||
|  | 24	alter view v1 as select 2	not supported | ||
|  | 25	drop view v1	supported | ||
|  | 26	create table t2 (a int)	supported | ||
|  | 27	alter table t2 add (b int)	supported | ||
|  | 28	drop table t2	supported | ||
|  | drop procedure p1| | ||
|  | drop table t1| | ||
|  | prepare stmt from 'select 1'| | ||
|  | create procedure p1() execute stmt| | ||
|  | call p1()| | ||
|  | 1 | ||
|  | 1 | ||
|  | call p1()| | ||
|  | 1 | ||
|  | 1 | ||
|  | drop procedure p1| | ||
|  | create function f1() returns int | ||
|  | begin | ||
|  | deallocate prepare stmt; | ||
|  | return 1; | ||
|  | end| | ||
|  | ERROR 0A000: Dynamic SQL is not allowed in stored function or trigger | ||
|  | create procedure p1() | ||
|  | begin | ||
|  | prepare stmt from 'select 1 A'; | ||
|  | execute stmt; | ||
|  | end| | ||
|  | prepare stmt from 'call p1()'| | ||
|  | execute stmt| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | execute stmt| | ||
|  | ERROR HY000: The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner | ||
|  | drop procedure p1| | ||
|  | drop table if exists t1, t2| | ||
|  | create procedure p1 (a int) language sql deterministic | ||
|  | begin | ||
|  | declare rsql varchar(100); | ||
|  | drop table if exists t1, t2; | ||
|  | set @rsql= "create table t1 (a int)"; | ||
|  | select @rsql; | ||
|  | prepare pst from @rsql; | ||
|  | execute pst; | ||
|  | set @rsql= null; | ||
|  | set @rsql= "create table t2 (a int)"; | ||
|  | select @rsql; | ||
|  | prepare pst from @rsql; | ||
|  | execute pst; | ||
|  | drop table if exists t1, t2; | ||
|  | end| | ||
|  | set @a:=0| | ||
|  | call p1(@a)| | ||
|  | @rsql | ||
|  | create table t1 (a int) | ||
|  | @rsql | ||
|  | create table t2 (a int) | ||
|  | Warnings: | ||
|  | Note	1051	Unknown table 't1' | ||
|  | Note	1051	Unknown table 't2' | ||
|  | select @a| | ||
|  | @a | ||
|  | 0 | ||
|  | call p1(@a)| | ||
|  | @rsql | ||
|  | create table t1 (a int) | ||
|  | @rsql | ||
|  | create table t2 (a int) | ||
|  | Warnings: | ||
|  | Note	1051	Unknown table 't1' | ||
|  | Note	1051	Unknown table 't2' | ||
|  | select @a| | ||
|  | @a | ||
|  | 0 | ||
|  | drop procedure if exists p1| |