DELIMITER //
CREATE PROCEDURE sp_crm_insertdata (flag INTEGER(1))
BEGIN
DECLARE customer_name VARCHAR(255); 
DECLARE i INTEGER(11) DEFAULT 10;
DECLARE j INTEGER(11) DEFAULT 1000;
IF (flag > 0) THEN
BEGIN
WHILE i < j DO
SET customer_name = CONCAT('customer', i);
INSERT INTO CUSTOMER(
CUSTOMER_NAME, MANAGE_USER, CUSTOMER_TYPE, SCALE, PURVIEW, 
CREATEOR, BIRTHDAY_REMIND_SMS, BIRTHDAY_REMIND
)
VALUES( customer_name, 'admin', '1', '0', '1', 'admin', '1', '1' );

SET i = (i + 1);
END WHILE;
END;
ELSE
BEGIN
#select i,j;
WHILE i < j DO
SET customer_name = CONCAT('customer', j);
SELECT customer_name;
DELETE FROM CUSTOMER WHERE CUSTOMER_NAME = customer_name;

SET j = (j - 1);
END WHILE;
END;

END IF;
END;
执行
CALL sp_crm_insertdata(0);的时候。
表就被清空了,删除了我不想要的数据好像while循环只走了一次INSERT INTO CUSTOMER(CUSTOMER_NAME, MANAGE_USER, CUSTOMER_TYPE, SCALE, PURVIEW,CREATEOR, BIRTHDAY_REMIND_SMS, BIRTHDAY_REMIND)
VALUES( 'haha', 'admin', '1', '0', '1', 'admin', '1', '1' );CUSTOMER_NAME = haha都被删除掉了

解决方案 »

  1.   

    你测试下           
     SET customer_name = CONCAT('customer', j);
     SELECT customer_name;
    看看结果是什么
      

  2.   

    customer1000
    应该是customer11才对
      

  3.   

    建议提供测试数据,这样别人可以直接在自己的机器上再现你的问题进行分析调试。
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  4.   


    DROP TABLE IF EXISTS `customer`;CREATE TABLE `customer` (
      `CUSTOMER_ID` int(11) NOT NULL auto_increment,
      `CUSTOMER_NAME` varchar(200) NOT NULL default '',
      `TEL_NO` varchar(200) NOT NULL default '',
      `FAX_NO` varchar(200) NOT NULL default '',
      `CUSTOMER_WWW` varchar(200) NOT NULL default '',
      `EMAIL` varchar(200) NOT NULL default '',
      `CUSTOMER_ADD` varchar(200) NOT NULL default '',
      `POSTALCODE` varchar(50) NOT NULL default '',
      `MEMO` varchar(200) NOT NULL default '',
      `MANAGE_USER` varchar(20) default NULL,
      `CUSTOMER_NUMBER` varchar(200) NOT NULL default '',
      `CUSTOMER_TYPE` int(2) default NULL,
      `SCALE` int(2) default NULL,
      `PROVINCE` varchar(200) default NULL,
      `CITY` varchar(200) default NULL,
      `PURVIEW` int(2) NOT NULL default '1',
      `PURVIEW_DEPT` varchar(200) default NULL,
      `PURVIEW_ROLE` varchar(200) default NULL,
      `PURVIEW_USER` varchar(200) default NULL,
      `CREATEOR` varchar(200) default '',
      `BIRTHDAY_REMIND_SMS` tinyint(1) NOT NULL default '1',
      `BIRTHDAY_REMIND` tinyint(1) NOT NULL default '1',
      PRIMARY KEY  (`CUSTOMER_ID`),
      UNIQUE KEY `CUSTOMER_ID` (`CUSTOMER_ID`),
      KEY `CUSTOMER_ID_2` (`CUSTOMER_ID`,`CUSTOMER_NAME`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      

  5.   

    当CALL sp_crm_insertdata(1);的时候语句成功执行,插入了一千条信息。当我CALL sp_crm_insertdata(0);删除信息的时候就不行了。
      

  6.   

    如果模拟你的问题?我已经执行了你的 
    1. CREATE TABLE `customer` ( ..
    2. CREATE PROCEDURE sp_crm_insertdata (flag INTEGER(1)) ...
    3. CALL sp_crm_insertdata(1); 
    4. CALL sp_crm_insertdata(0);
    mysql> select count(*) from CUSTOMER;.....
    ..
    +---------------+
    | customer12    |
    +---------------+
    1 row in set (0.86 sec)+---------------+
    | customer_name |
    +---------------+
    | customer11    |
    +---------------+
    1 row in set (0.88 sec)Query OK, 0 rows affected (0.88 sec)mysql> select count(*) from CUSTOMER;
    +----------+
    | count(*) |
    +----------+
    |        0 |
    +----------+
    1 row in set (0.00 sec)mysql>没有什么问题。问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧