mysql的自定义的函数和存储过程

来源:互联网 发布:淘宝电工工具袋 编辑:程序博客网 时间:2024/04/30 18:04

自定义函数的两个必要条件:参数,返回值。


存储过程的概念:存储过程是sql集合和控制语句的预编译集合,以一个名称存储并作为一个单元处理。


范例:

        #创建不带参数函数
         create function f1() returns varchar(30)
         return  DATE_FORMAT(NOW(),"%y年%m月%d日 %H点:%i分:%s秒");
        #运行函数
       select f1();


      #创建符合结构函数体,给表插入username的属性
     create function adduser(username VARCHAR(32)) returns int(11) 
     BEGIN
     insert test(username) VALUES(username);
     return LAST_INSERT_ID();//返回id值
     end
   

       select adduser('王国');

   
     #删除函数
      drop FUNCTION f1



        -- 创建带参函数(计算两个数的平均值)f2括号是带参的参数类型,returns 后面跟的是返回值的类型,return 代表          返回的结果体
       create function f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS  float(10,2)                       UNSIGNED  return (num1+num2)/2;

         select f2(10,15);


存储过程的定义:

优点:增强了sql语句的功能性和灵活性,实现较快的执行速度,减少网络的流量


-- 创建无参存储过程
create PROCEDURE pr() select VERSION()


-- 创建删除的存储函数(参数是IN的类型,删除test表id=2的数据)


create PROCEDURE removTestById(IN p_id int) 
BEGIN
delete from test where id=p_id;
end 


call removTestById(2);



#带OUT的参数返回值(表示有返回值)

create PROCEDURE removeIdAndReturnCount(IN p_id int ,OUT count int)
BEGIN
delete from test where id=p_id;
select count(*) from test into count ; -- nto代表的意思是把count(*)的值赋值给count返回带回去
end


call removeIdAndReturnCount(3,@count) -- 第一个直接写传的参数第二个参数是返回的值,要用@方式的值来接收,代表用户变量,存储函数里的变量叫局部变量
select @count;