34 lines
		
	
	
		
			656 B
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
		
			656 B
		
	
	
	
		
			Plaintext
		
	
	
	
|  | drop table if exists t3; | ||
|  | create table t3 ( f bigint unsigned not null ); | ||
|  | drop procedure if exists fib; | ||
|  | create procedure fib(n int unsigned) | ||
|  | begin | ||
|  | if n > 1 then | ||
|  | begin | ||
|  | declare x, y bigint unsigned; | ||
|  | declare c cursor for select f from t3 order by f desc limit 2; | ||
|  | open c; | ||
|  | fetch c into y; | ||
|  | fetch c into x; | ||
|  | insert into t3 values (x+y); | ||
|  | call fib(n-1); | ||
|  | ## Close the cursor AFTER the recursion to ensure that the stack | ||
|  | ## frame is somewhat intact. | ||
|  | close c; | ||
|  | end; | ||
|  | end if; | ||
|  | end| | ||
|  | set @@max_sp_recursion_depth= 20| | ||
|  | insert into t3 values (0), (1)| | ||
|  | call fib(4)| | ||
|  | select * from t3 order by f asc| | ||
|  | f | ||
|  | 0 | ||
|  | 1 | ||
|  | 1 | ||
|  | 2 | ||
|  | 3 | ||
|  | drop table t3| | ||
|  | drop procedure fib| | ||
|  | set @@max_sp_recursion_depth= 0| |