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
Data truncated for column 'b' at row 
这个是例子上的,怎么报数据被截断啊
我把上面的变量名改了,它又报数据太长
ERROR 1406 (22001): Data too long for column 'b' at row 5FETCH cur1 INTO a, b;
问题大概是出在这一行

解决方案 »

  1.   

    这是例子,表是我自己定义,不知道会不会是表的问题,才学这个,各位师傅请指教-- Table "t1" DDLCREATE TABLE `t1` (
      `ID` int(11) NOT NULL default '0',
      `DATA` binary(255) default NULL,
      PRIMARY KEY  (`ID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    -- Table "t2" DDLCREATE TABLE `t2` (
      `i` int(11) default NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    -- Table "t3" DDLCREATE TABLE `t3` (
      `p1` char(16) default NULL,
      `p2` int(11) default NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
      

  2.   

    test.t1 的表结构是什么? data 字段是什么型?
    你的b是一个INT型。desc test.t1 ;贴一下结果。
      

  3.   

    mysql> desc test.t1;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | ID    | int(11)     | NO   | PRI | 0       |       |
    | DATA  | binary(255) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
      

  4.   

    | DATA  | binary(255) 一个 INT 是放不下的。