mysql系列:存储过程与自定义函数
来源:互联网 发布:手机淘宝怎么取消订单 编辑:程序博客网 时间:2024/06/04 18:40
1、存储过程
定义一个PROCEDURE:
这里演示的是:SELECT ... INTO语句
delimiter //CREATE PROCEDURE simpleproc (OUT param1 INT) BEGIN # doSomething SELECT COUNT(*) INTO param1 FROM person; END //delimiter ;
在程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在程序体中的 ;定界符被传递到服务器而不是被mysql自己来解释。
执行这个PROCEDURE
CALL simpleproc(@t_out);SELECT @t_out AS count;
执行结果:
再来一个例子:
这里演示的是:变量SET语句
delimiter //CREATE PROCEDURE test_in_out(IN param1 INT,OUT param2 INT) BEGIN SET param2 = param1+1; END //delimiter ;SET @t_in = 1;CALL test_in_out(@t_in,@t_out);SELECT @t_out AS result;
结果如下:
存储过程还可以使用:DECLARE局部变量,如下:
delimiter //CREATE PROCEDURE sp1 (x VARCHAR(5)) BEGIN DECLARE xname VARCHAR(5) DEFAULT 'bob'; SELECT xname,x; END; //delimiter ;CALL sp1(3);结果如下所示:
注:指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数)
2、自定义函数
delimiter // CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) RETURN CONCAT('Hello, ',s,'!'); //delimiter ; SELECT hello('world') AS greet;
结果如下:
补充:修改使用ALTER,删除使用DROP
一个官方案例,仅供参考:
delimiter // CREATE PROCEDURE curdemo()BEGIN DECLARE done INT DEFAULT 0; DECLARE a CHAR(16); DECLARE b,c INT; DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1; # 声明游标 DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;# 定义条件,当游标状态为'02000'时,设置 done值为 1 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cur1;#打开游标 OPEN cur2; REPEAT# 循环 FETCH cur1 INTO a, b;# 如果有下一行,则读取下一行 FETCH cur2 INTO c; IF NOT done THEN IF b < c THEN INSERT INTO test.t3 VALUES (a,b); ELSE INSERT INTO test.t3 VALUES (a,c); END IF; END IF; UNTIL done END REPEAT;# 直到满足done这个条件后终止 CLOSE cur1; # 关闭游标 CLOSE cur2;END //delimiter ; SELECT curdemo();
注:游标状态'02000'
流程控制构造:
IF, CASE, LOOP, WHILE, ITERATE, 及 LEAVE,目前还不支持FOR循环,此处非本文重点不作过深入讲解
0 0
- mysql系列:存储过程与自定义函数
- MySQL存储过程 与 自定义函数
- MySQL自定义函数与存储过程
- mysql存储过程与自定义函数
- MySQL学习系列10:自定义存储过程和函数
- 【MySQL】MySQL函数、自定义函数、存储过程
- MSSQL 和 Mysql 切割字符串 自定义函数与存储过程
- MYSQL 存储过程与自定义函数的区别
- [MySQL] MySQL存储过程与存储函数
- MYSQL存储过程与函数
- MySql存储过程与函数
- MySql存储过程与函数
- mysql函数与存储过程
- mysql创建自定义函数和存储过程
- mysql 自定义函数、创建存储过程
- 4)mysql自定义函数和存储过程
- mysql 存储过程、存储过程嵌套、自定义函数代码示例
- mysql存储过程与函数------创建存储过程与函数
- Eclipse中为Android应用添加jar包
- NSClassFromString,NSSelectorFromString,isKingOfClass
- C++中的static
- poj 3050 Hopscotch
- hdu-1542-Atlantis 线段树
- mysql系列:存储过程与自定义函数
- 黑马程序员_11_高新技术之JavaBean和注解
- MFC 刷新指定控件
- 尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题
- Android Activity生命周期(图文)
- linux的shell脚本
- EXT4.0 (1~3章)学习资料
- 线段树——poj1823
- python tornado window 平台安装