mysql中怎样使用mysql 创建自定义函数数

君,已阅读到文档的结尾了呢~~
数据库 自定义函数 mysql 自定义函数 mysql中自定义函数 数据库自定义类型 mysql数据库 数据库自定义字段 fm2013自定义数据库 mysql 创建数据库 mysql数据库下载 mysql 删除数据库
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
数据库 mysql
高级查询及自定义函数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口MySQL下创建序列及创建自定义函数方法介绍 - 刚泡 - 博客园
posts - 15, comments - 2, trackbacks - 0, articles - 0
&&&&&&& 工作过程中需要将基于DB2数据库的应用以及数据迁移到MySQL中去,在原应用中,大量使用了SEQUENCE,考虑尽量减少代码的修改,决定在迁移后的应用中继续保留SEQUENCE的使用,这就要求在MySQL中寻找替代SEQUENCE的解决方案。
&&&&&&& 在DB2中创建一个SEQUENCE的方法如下:
DROP SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO;
CREATE SEQUENCE TRZ_MEMBER.SEQ_TRZ_MEMBER_NO
INCREMENT BY 1
START WITH
MySQL自增长与Oracle(DB2)序列的区别:
自增长只能用于表中的其中一个字段;
自增长只能被分配给固定表的固定的某一字段,不能被多个表共用;
自增长会把一个未指定或NULL值的字段自动填上。
要想在MySQL中替代SEQUENCE功能需要做一下几件事:
1:建立SEQUENCE表,存储多条SEQUENCE信息;
2:完成自定义函数的定义,在程序中通过该函数完成生成的序列的获取;
接下来将介绍两种生成方式,一种是非并发方式,一种是并发方式,前一种不能够处理并发访问中存在的问题,后一种则能够处理,两种方式的第一步都相同,就是创建SEQUENCE表:
非并发方式:
&&&&&&& 一:创建SEQUENCE表:
DROP TABLE
CREATE TABLE
name VARCHAR(50) NOT NULL,
current_value BIGINT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
ENGINE=InnoDB;
&&&&&&& 该表用来存储多条sequence信息,每条sequence为一个序列,其效果等同于之前介绍的DB2中的sequence。假设需要替换DB2中的SEQ_TRZ_MEMBER_NO(如前定义),则插入MySQL中表sequence的插入语句如下:
INSERT INTO sequence VALUES ('SEQ_TRZ_MEMBER_NO',,1);
&&&&&&& 二:创建MySQL自定义函数,用以获取当前sequence值:
1:首先明确的是,自定义函数是对MySQL提供的函数库的一种补充,用来完成自定义功能,新建MySQL函数必须通过MySQL Commond Line键入命令行的方式进行创建,而不能通过第三方提供的图形化数据库操作软件来创建;
2:首先提供一个范例,好有一个总体的认识:
DELIMITER $$
DROP FUNCTION IF EXISTS
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS BIGINT
DECLARE c_value BIGINT DEFAULT
SET c_value = 0;
SELECT current_value into c_value
FROM sequence
WHERE name = seq_
DELIMITER ;
该函数的功能为返回指定序列的当前值。
其中第一行代码(DELIMITER $$ )定义一个结束标识符,因为MySQL默认是以分号作为SQL语句的结束符的,而函数体内部要用到分号,所以会跟默认的SQL结束符发生冲突,所以需要先定义一个其他的符号作为SQL的结束符。没有加这个定义的话会报如下错误:
错误码: 1064
You have an error in your SQL check the manual that corresponds to your MySQL server version for the right syntax to use near 'end' at line 1
第二行(DROP FUNCTION IF EXISTS )是删除同名的类,不然如果已经存在了同名函数,会报如下错误:
错误码: 1304
FUNCTION currval already exists
第三,第四行定义函数名称和函数返回值;
而函数体必须定义在Begin和End中间。
通过MySQL Commond Line执行后效果如下所示:
通过如下语句验证效果:
该函数只完成了获取当前序列值的作用,还需要定义一个函数来完成获取下一个序列值的功能,代码如下所示:
DROP FUNCTION IF EXISTS
DELIMITER $$
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS BIGINT
CONTAINS SQL
UPDATE sequence
current_value = current_value + increment
WHERE name = seq_
RETURN currval(seq_name);
DELIMITER ;
该函数用来获取下一个序列值,在MySQL Commond Line中执行后的结果如下所示:
通过如下语句验证函数是否生效:
SELECT NEXTVAL('SEQ_TRZ_MEMBER_NO');
至此非并发方式的sequence生成方式就实现完了。要想使得sequence的生成能够处理并发的方式,只需要少做修改即可。
并发生成方式:
sequence的并发生成方式同非并发生成方式都需要建立sequence表,如下:
一:创建SEQUENCE表:
DROP TABLE
CREATE TABLE
name VARCHAR(50) NOT NULL,
current_value BIGINT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
ENGINE=InnoDB;
插入定义的序列:
INSERT INTO sequence VALUES ('SEQ_TRZ_MEMBER_NO',,1);
二:自定义函数实现:
DROP FUNCTION IF EXISTS
DELIMITER $$
CREATE FUNCTION seq(seq_name char (20)) returns BIGINT
UPDATE sequence SET current_value=last_insert_id(current_value+increment) WHERE name=seq_
RETURN last_insert_id();
DELIMITER;
函数内部调用了MySQL内部提供的last_insert_id()函数完成并发控制。
而有关于last_insert_id的相关资料请参考:
文中代码部分引自:
http://www.blogjava.net/Skynet/archive//301847.html> MySQL存储过程和存储函数中变量的使用MySQL存储过程和存储函数中变量的使用MySQL存储过程和存储函数中变量的使用
在MySQL的存储过程和函数中,可以定义和使用变量。
我们可以使用DECLARE关键字来定义变量,然后可以为变量赋值。
这些变量的作用范围位于BEGIN...END程序段中。
在MySQL中,使用DECLARE关键字来定义变量。定义变量的基本语法如下:
DECLARE var_name[,var_name,...] type [DEFAULT value];
DECLARE:该关键字用于声明变量。
var_name:该参数是变量的名称。这里可以同时定义多个变量。
type:该参数用于指定变量的类型。
DEFAULT value子句将变量默认值设置为value,没有使用DEFAULT子句时,默认值(初始值)为NULL。
定义名称为my_sql的变量,数据类型为INT类型,默认值为100。SQL代码如下:
DECLARE my_sql INT DEFAULT 100;
为变量赋值
1. MySQL中可以使用SET关键字来为变量赋值
SET语句的基本语法如下:
SET var_name=expr[,var_name=expr]...;
SET关键字是用于为变量赋值的。
var_name参数是变量的名称。
expr参数是赋值表达式。
一个SET语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。
为变量my_sql赋值为30。SQL代码如下:
SET my_sql=30;
声明3个变量,分别为var1、var2和var3,数据类型为INT,使用SET为变量赋值。SQL代码如下:
DECLARE var1,var2,var3 INT;
SET var1=10,var2=20;
SET var3=var1+var2;
2. MySQL中还可以使用SELECT...INTO语句为变量赋值
其基本语法格式如下:
SELECT col_name[,...] INTO var_name[,...] FROM table_name WHERE condition
col_name参数表示查询的字段名称。
var_name参数是变量的名称。
table_name参数指的是表的名称。
condition参数指的是查询条件。
从employee表中查询id为2的记录,将该记录的d_id值赋给变量my_sql。SQL代码如下:
SELECT d_id INTO my_sql FROM employee WHERE id=2;
当然,也可以先定义my_sql变量,然后再赋值。SQL语句如下:
DECLARE my_sql INT(11);
SELECT d_id INTO my_sql FROM employee WHERE id=2;
my_sql变量的数据类型与employee表中的d_id数据类型是一致的。
精华推荐&&&&&&&&&&&&&&Copyright&
All Rights ReservedMySQL 自定义函数 (Function) 示例 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 20时,
一个很简单的 MySQL 函数定义
代码片段(1)
1.&[代码]SQL&&&&
mysql& delimiter $$
mysql& CREATE FUNCTION myFunction
(in_string
VARCHAR(255),
in_find_str
VARCHAR(20),
in_repl_str
VARCHAR(20))
RETURNS VARCHAR(255)
DECLARE l_new_string VARCHAR(255);
DECLARE l_find_pos
SET l_find_pos=INSTR(in_string,in_find_str);
IF (l_find_pos&0) THEN
SET l_new_string=INSERT(in_string,l_find_pos,LENGTH(in_find_str),in_repl_str);
SET l_new_string=in_
RETURN(l_new_string);
Query OK, 0 rows affected (0.00 sec)
mysql& select myFunction('ABC','A','Z');
+---------------------------+
| myFunction('ABC','A','Z') |
+---------------------------+
+---------------------------+
1 row in set (0.00 sec)
mysql& drop function myF
Query OK, 0 rows affected (0.00 sec)
开源中国-程序员在线工具:
相关的代码(247)
23回/57020阅
[JavaScript]
35回/33811阅
5回/25109阅
1回/16836阅
55回/16447阅
3回/16450阅
3回/12373阅
4回/10700阅
44回/9746阅
[Shell/批处理]
25回/9516阅
不知道为什么我安装 同样的方法为什么不行呢??呵呵
2楼:码农爱猿猴 发表于
谢谢楼主 !正愁这个存储函数的使用呢& 回去试试...
开源从代码分享开始
鉴客的其它代码MySQL 创建用户自定义函数_数据库技术_Linux公社-Linux系统门户网站
你好,游客
MySQL 创建用户自定义函数
来源:Linux社区&
作者:Linux
为了防止分号产生的中途输出,自己定义一个 分隔符,这里仿照mysql官方的例子:使用两个美元符号 $$ 作为分割符号,下面这段代码就是创建一个自定义mysql函数的原型了,可以在这个基础上修改,这样,创建函数就不会产生很多错误了.
set global log_bin_trust_function_creators = 1; -- 开启bin_log 复制 函数创建DROP FUNCTION IF EXISTS -- 删掉已经存在的DELIMITER $$&&& -- 定义分隔符,必须要有,可以不是$$CREATE FUNCTION hello( s varchar(30)) -- 多个参数用,分割 参数的类型必须是mysql列存在的类型RETURNS VARCHAR(255)&&&&&&&&&&&&&&&&& -- 指定返回值类型,如果你不确定返回文本长度,可以使用textBEGIN&&& DECLARE str varchar(255) default 'hello '; -- 定义一个变量,可以指定默认值&&& SET str = concat(str,s);&&&&&&&&&&&&&&&&&&& -- 设置改边变量的值&&& RETURN&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& -- 返回值END $$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& -- 注意看清楚了,这个end后面有你在前面定义的分割符号DELIMITER $$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& -- 好,这里结束。
相关资讯 & & &
& (04/09/:28)
& (12/16/:41)
& (12/16/:35)
& (12/16/:08)
& (12/16/:02)
& (11/05/:04)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 mysql 自定义函数 if 的文章

 

随机推荐