另一种开始 2021-06-15 21:29 采纳率: 0%
浏览 3

为什么这段mysql游标拉不到第一行?

在学习游标的使用,弄了两个表,一个girls(_girlId_,name,tel),另一个Tels(tel),其中一个girls表tel字段都是空的,想建立存储过程利用游标逐一地将Tels表内数据搬到girls的tel属性上,但是发现自己建的循环体内总是会把tel第二行起的数据给游标:

 DROP TABLE IF EXISTS girls;
 CREATE TABLE girls(
     _girlId_ int auto_increment primary key,
     _girlName_ varchar(20)
 );
 INSERT INTO girls(_girlName_) VALUES ('Maria');
 INSERT INTO girls(_girlName_) VALUES ('Ringo');
 INSERT INTO girls(_girlName_) VALUES ('Messa');
 INSERT INTO girls(_girlName_) VALUES ('Alice');
ALTER TABLE girls add tel varchar(20);

DROP TABLE IF EXISTS TELS;
CREATE TABLE TELS (
    tel varchar(20)
);

INSERT INTO TELS VALUES ('11111111');
INSERT INTO TELS VALUES ('22222222');
INSERT INTO TELS VALUES ('33333333');
INSERT INTO TELS VALUES ('44444444');

DROP PROCEDURE IF EXISTS TravarseTEL;
CREATE PROCEDURE TravarseTEL()
BEGIN
    DECLARE telvalue VARCHAR(20);
    DECLARE i INT DEFAULT 0;
    DECLARE len INT DEFAULT 0;
    DECLARE FOUND BOOLEAN DEFAULT TRUE;
    DECLARE telcur CURSOR FOR SELECT tel FROM TELS;
    Declare continue handler for not found set FOUND = false;
    SELECT COUNT(*) FROM girls INTO len;
    OPEN telcur;
    FETCH telcur into telvalue;
    WHILE i <= len  and found DO
        SELECT telvalue;
        UPDATE girls SET tel = telvalue WHERE _girlId_ = i;
        FETCH telcur into telvalue;
        set i = i+1;
    end while;
    close telcur;
end;
call TravarseTEL();

  • 写回答

1条回答 默认 最新

  • 另一种开始 2021-06-15 21:30
    关注

    感觉第一段fetch语句已经拉取了第一行了,但不知道为什么进入循环体里首先被添加的就是第二行,后面发现,只要在循环体里又加了一个fetch语句就会从第二起开始取,无论循环体之前有没有加fetch语句都是这样。

    评论

报告相同问题?

悬赏问题

  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?