mysql 支持带参数的游标吗

mysql 支持带参数的游标吗,第1张

你这种格式的没有,不过这个变量还是可以用下面这种方法实现的。

mysql>delimiter //

mysql>

mysql>CREATE PROCEDURE curdemo(IN V_GROUP INT)

->BEGIN

-> DECLARE done INT DEFAULT 0

-> DECLARE a INT

-> DECLARE b CHAR(16)

->

-> DECLARE cur1 CURSOR FOR SELECT id,name FROM student where classid=V_GROUP

-> DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1

->

-> OPEN cur1

->

-> REPEAT

->FETCH cur1 INTO a, b

->select a,b

-> UNTIL done END REPEAT

->

-> CLOSE cur1

->END

->

->

->//

Query OK, 0 rows affected (0.20 sec)

mysql>

mysql>delimiter

mysql>

mysql> SELECT id,name,classid FROM student

+----------+--------+---------+

| id | name | classid |

+----------+--------+---------+

| 91010101 | 丁乙甲 | 10101 |

| 91010102 | 索春龙 | 10101 |

| 91010103 | 刘莉莉 | 10101 |

| 91010104 | 隋鑫 | 10101 |

| 91010105 | 长命 | 10101 |

| 91010201 | 河江山 | 10102 |

| 91010202 | 祝立业 | 10102 |

| 91010203 | 姚桂娇 | 10102 |

| 91010204 | 张冬梅 | 10102 |

| 91020101 | 蒋旭 | 10201 |

| 91020102 | 邱介臣 | 10201 |

| 91020103 | 王晓燕 | 10201 |

| 91020104 | 夏丽佳 | 10201 |

| 91020201 | 熊建业 | 10202 |

| 91020202 | 丛俊江 | 10202 |

| 91020203 | 周静燕 | 10202 |

| 91020204 | 黄爽 | 10202 |

| 91020301 | 魏国兴 | 10203 |

| 91020302 | 蒋洪涛 | 10203 |

| 91020303 | 倪春红 | 10203 |

| 91030101 | 张文天 | 10301 |

| 91030102 | 姜洋 | 10301 |

| 91030103 | 赵聪 | 10301 |

| 91030201 | 王飞 | 10302 |

+----------+--------+---------+

24 rows in set (0.00 sec)

mysql>

mysql>CALL curdemo(10101)

+----------+--------+

| a| b |

+----------+--------+

| 91010101 | 丁乙甲 |

+----------+--------+

1 row in set (0.00 sec)

+----------+--------+

| a| b |

+----------+--------+

| 91010102 | 索春龙 |

+----------+--------+

1 row in set (0.00 sec)

+----------+--------+

| a| b |

+----------+--------+

| 91010103 | 刘莉莉 |

+----------+--------+

1 row in set (0.00 sec)

+----------+------+

| a| b|

+----------+------+

| 91010104 | 隋鑫 |

+----------+------+

1 row in set (0.00 sec)

+----------+------+

| a| b|

+----------+------+

| 91010105 | 长命 |

+----------+------+

1 row in set (0.00 sec)

+----------+------+

| a| b|

+----------+------+

| 91010105 | 长命 |

+----------+------+

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql>

先声明一个游标语法

DECLARE v_1 VARCHAR(16)

DECLARE v_2 VARCHAR(16)

DECLARE c_XXX CURSOR FOR

SELECT c_1, c_2

FROM t_1

同时声明一个布尔型的变量FOUND,当循环的条件不成立时,结束循环用的。

DECLARE FOUND BOOLEAN DEFAULT TRUE

DECLARE CONTINUE HANDLER FOR NOT FOUND SET FOUND = FALSE

在使用游标的时候,要先打开游标,语法:OPEN c_XXX

使用的时候,要先打开游标,取出第一条数据,语法: FETCH c_XXX INTO v_1, v_2

然后才开始执行循环,语法:WHILE FOUND DO

执行需要执行的语句;

取下一条数据放到当前游标中,FETCH c_XXX INTO v_1, v_2

结束循环,语法:END WHILE

结束游标,语法:CLOSE c_cargo。有什么问题我们再沟通啊。不知道你具体要问题的是什么。

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。

1. check table 和 repair table

登陆mysql 终端:

mysql -uxxxxx -p dbname

check table tabTest

如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

repair table tabTest

进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

myisamchk -of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7228407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存