怎么用游标循环输出字段?

谁学逆向工程 2011-05-24 01:14:02
mysql> select*from 入库单表;
+------+---------------------+--------------+----------------+------+------+----
--+------+------+------+
| 单号 | 入库日期 | 品名 | 供货商编号 | 颜色 | 规格 | 数
量 | 单位 | 单价 | 金额 |
+------+---------------------+--------------+----------------+------+------+----
--+------+------+------+
| 001 | 2011-05-16 16:03:02 | CP | | | | 1
2 | | 5 | 60 |
| | 2011-05-23 15:21:29 | 水杯 | | 白 | |
0 | | 0 | 0 |
| | 2011-05-23 15:21:29 | 水杯 | | 白 | |
0 | | 0 | 0 |
| | 2011-05-23 15:21:29 | SQL 入门经典 | 人民邮电出版社 | | |
0 | | 0 | 0 |
+------+---------------------+--------------+----------------+------+------+----
--+------+------+------+
4 rows in set (0.03 sec)

mysql> DELIMITER //

mysql> drop procedure p//
Query OK, 0 rows affected (0.07 sec)

mysql> create procedure p()
-> begin
-> declare t text;
-> DECLARE o CURSOR FOR SELECT 品名 from 入库单表;
-> open o;
-> repeat
-> fetch o into t;
-> select t;
-> end repeat;
-> close o;
-> end//
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'end r
epeat;
close o;
end' at line 9


一个游标只能指向一个字段吗?书上的例子,在 FOR 后面的 SELECT 中都是一个字段。
...全文
126 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2011-05-24
  • 打赏
  • 举报
回复
参考下面红字部分。 另外好像楼主从来不看帮助手册!

[Quote]20.2.11. 光标
20.2.11.1.声明光标

20.2.11.2. 光标OPEN语句

20.2.11.3. 光标FETCH语句

20.2.11.4. 光标CLOSE语句

简单光标在存储程序和函数内被支持。语法如同在嵌入的SQL中。光标当前是不敏感的,只读的及不滚动的。不敏感意为服务器可以活不可以复制它的结果表。

光标必须在声明处理程序之前被声明,并且变量和条件必须在声明光标或处理程序之前被声明。

例如:

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;
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;

CLOSE cur1;
CLOSE cur2;
END
20.2.11.1.声明光标
[/Quote]
rucypli 2011-05-24
  • 打赏
  • 举报
回复
declare cur cursor for select id,Rep_operationtype,iRep_status,rep_sync_id from rep_shadow_rs where rep_sync_id between last_rep_sync_id and max_rep_sync_id;
-- 声明游标的异常处理,设置一个终止标记
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop=1;

-- 打开游标
open cur;

-- 读取一行数据到变量
fetch cur into iId,iRep_operationtype,iRep_status,iRep_Sync_id;

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧