mysql 创建function
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
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Tp5使用小记
- 下一篇: TP5基础持续更新 第一次