MySql创建/删除函数和存储过程

切记创建函数或过程的时候不要用phpmyadmin,不然有可能出错!
一、查看创建函数的功能是否开启:
mysql> show variables like ‘%func%’;
+—————————————–+——-+
| Variable_name | Value |
+—————————————–+——-+
| log_bin_trust_function_creators | ON |
+—————————————–+——-+
1 row in set (0.02 sec)
二、如果Value处值为OFF,则需将其开启。
mysql> set global log_bin_trust_function_creators=1;
三、创建函数时,先选择数据库,
mysql> use xxx;
Database changed
delimiter $$是设置 $$为命令终止符号,代替分号,因为分号在begin…end中会用到;
mysql> delimiter $$
CREATE FUNCTION first_func(param1 varchar(5),parmam2 varchar(5),param3 varchar(10))
RETURNS TINYINT
BEGIN
RETURN 1;
END
$$ //函数创建成功后需恢复分号为命令终止符号。
mysql> delimiter ;
四、测试:
mysql> select first_func(‘aaa’,’bbb’,’ccc’);
+——————————-+
| first_func(‘aaa’,’bbb’,’ccc’) |
+——————————-+
| 1 |
+——————————-+
1 row in set (0.47 sec)
五、删除函数:
mysql> drop function first_func ;
Query OK, 0 rows affected (0.11 sec)
六、查看函数
1) show function status
显示数据库中所有函数的基本信息
2)查看某个具体函数
mysql>show create function function;
创建存储过程
1.进入mysql命令行
mysql>
2.用delimiter命令来把语句定界符从 ;变为//。这样就允许在程序体用;定界符传递到服务器,而不是被mysql自己来解释。
mysql> delimiter //
3.创建存储过程
mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+——+
| @a |
+——+
| 3 |
+——+
1 row in set (0.00 sec)
删除存储过程num_from_employee的代码如下:
DROP  PROCEDURE  num_from_employee ;
删除存储函数name_from_employee的代码如下:
DROP  FUNCTION  name_from_employee ;
附带生成随机数函数:
delimiter //
drop function if exists rand_strings;
create function rand_strings(str_length tinyint unsigned , str_type tinyint unsigned)
returns varchar(255)
begin
declare counter int unsigned default 0;
declare const_chars varchar(64) default ‘0123456789’;
declare result varchar(255) default ”;

if str_type = 1 then
set const_chars = ‘0123456789’;
elseif str_type = 2 then
set const_chars = ‘abcdefghijklmnopqrstuvwxyz’;
elseif str_type = 3 then
set const_chars = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
elseif str_type = 4 then
set const_chars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;
elseif str_type = 5 then
set const_chars = ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;
elseif str_type = 6 then
set const_chars = ‘0123456789abcdefghijklmnopqrstuvwxyz’;
elseif str_type = 7 then
set const_chars = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
else
set const_chars = ‘0123456789’;
end if;

while counter < str_length do
set result = concat(result,substr(const_chars,ceil(rand()*(length(const_chars)-1)),1));
set counter = counter + 1;
end while;

return result;
end
//
DELIMITER ;

此条目发表在数据库分类目录,贴了标签。将固定链接加入收藏夹。

发表回复