存储过程的delete语句出错。各位帮忙
-
SQL code
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都被删除掉了
你测试下
SET customer_name = CONCAT(‘customer’, j);
SELECT customer_name;
看看结果是什么
只有分步调试,看看问题出在什么地方
建议提供测试数据,这样别人可以直接在自己的机器上再现你的问题进行分析调试。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
如果模拟你的问题?
我已经执行了你的
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);
-
SQL code
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>