牛骨文教育服务平台(让学习变的简单)
博文笔记

mysql 创建function

创建时间:2015-03-23 投稿人: 浏览次数:1618

      mysql 的function和procedure 仅对5.0版本后的有效(包括show function status等命令是没用的)


以创建function为例,存储过程和这个差不多,懒得打字了

     首先先在mysql 下运行 set global log_bin_trust_function_creators=TRUE;  这句话是把创建函数的权限打开,不然会报错的

     然后可以写程序了,mysql的语法比较奇特(与oracle相比)

  

DELIMITER $$
create function fn_get_work_date(next_date date,pre_date date)
returns int

begin 
  DECLARE v_re int;
select count(*) into v_re from old.calendar where yymmdd>=pre_date and yymmdd<=next_date and code=0;
return v_re;
end $$

DELIMITER 百度了一下:
MySQL中delimit命令。这个命令与存储过程没什么关系。 其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。 即改变输入结束符。默认情况下,delimiter是分号“;”。 在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。但有时候,不希望MySQL这么做。因为可能输入较多的语句,且语句中包含有分号。 默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。因为mysql一遇到分号,它就要自动执行。这种情况下,就可以使用delimiter,把delimiter后面换成其它符号,如//或$$。 此时,delimiter作用就是对整个小段语句做一个简单的封装。

     把它理解成格式吧,接下来是定义创建函数的名字和输入输出
     从begin开始,定义变量时,每个变量之前都必须加declare,如  DECLARE v_re1 int;  DECLARE v_re2 int; 这个和oracle只要写一遍declare不一样
     其他的sql语句照写,结束时end $$ 一下就好了。

    按下执行后就可以看到结果了


   比较蛋疼的是,mysql好像不能编辑你写过的function ,如果要编辑必须先删掉 drop function if exists "your_function_name"  ,然后再建

  
   可以使用show function/procedure status 查看mysql上存在的function和procedure



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。