| CREATE PROCEDURE 过程名 ([过程参数[,...]]) [特性 ...] 过程体 |
| CREATE FUNCTION 函数名 ([函数参数[,...]]) RETURNS 返回类型 [特性 ...] 函数体 |
| LANGUAGE SQL │ [NOT] DETERMINISTIC │ { CONTAINS SQL │ NO SQL │ READS SQL DATA │ MODIFIES SQL DATA } │ SQL SECURITY { DEFINER │ INVOKER } │ COMMENT 'string' |
| BEGIN 有效的SQL语句 END |
| DELIMITER $$ Stored Procedures and Functions DELIMITER ; |
| /**/ set len=LENGTH(inpass); if((len<=0) or (len>10)) then return ""; end if; set offset=(SECOND(NOW()) mod 39)+1; /*根据秒数取模*/ /*insert into testtb values(offset,'offset: ');*/ set string_out='YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_'; /*密钥*/ set string_in='_$#ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; set outpass=CONCAT(outpass,SUBSTRING(string_out,offset,1)); /* insert into testtb values(2,outpass);*/ set string_out=CONCAT(string_out,string_out); set @i=0; REPEAT set @i=@i+1; set outpass=CONCAT(outpass,SUBSTR(string_out,INSTR(string_in,SUBSTRING (inpass,@i,1))+offset,1)); /* insert into testtb values(@i+2,outpass);*/ UNTIL (@i>=len) end REPEAT; return outpass; END |
| CREATE PROCEDURE `pro_addmm`(IN inpass varchar(10),OUT outpass varchar(11)) BEGIN declare string_in varchar(39); declare string_out varchar(78); declare offset tinyint(2); declare len tinyint; set outpass='; set len=LENGTH(inpass); if((len<=0) or (len>10)) then set outpass='; else set offset=(SECOND(NOW()) mod 39)+1; set string_out='YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_'; set string_in='_$#ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; set outpass=CONCAT(outpass,SUBSTRING(string_out,offset,1)); set string_out=CONCAT(string_out,string_out); set @i=0; REPEAT set @i=@i+1; set outpass=CONCAT(outpass,SUBSTR(string_out,INSTR(string_in,SUBSTRING (inpass,@i,1))+offset,1)); UNTIL (@i>=len) end REPEAT; end if; END |
| mysql> call pro_addmm('zhouys',@a); Query OK, 0 rows affected (0.00 sec) mysql> SELECT @a; +---------+ │ @a │ +---------+ │ U_PI6$4 │ +---------+ 1 row in set (0.00 sec) mysql> call pro_addmm('zhouys',@a); Query OK, 0 rows affected (0.00 sec) mysql> SELECT @a; +---------+ │ @a │ +---------+ │ 9P8UEGM │ +---------+ 1 row in set (0.00 sec) mysql> select fun_submm('U_PI6$4'); +----------------------+ │ fun_submm('U_PI6$4') │ +----------------------+ │ ZHOUYS │ +----------------------+ 1 row in set (0.00 sec) |