【发布时间】:2012-02-26 21:44:49
【问题描述】:
mysql> select * from S_TABLE;
+--------+--------------------+
| S_ID | S_TITLE |
+--------+--------------------+
| 1 | Jim |
| 2 | George |
| 3 | Sam |
| 4 | Zoe |
+--------+--------------------+
mysql> select * from F_TABLE;
+--------+--------+--------------+----------+
| F_ID | S_ID | F_VALUE | F_TITLE |
+--------+--------+--------------+----------+
| 1 | 1 | 4.5 | Delta |
| 2 | 2 | 24.5 | Gamma |
| 3 | 3 | 44.4 | RHO |
| 4 | 3 | 5.0 | Beta |
+--------+--------+--------------+----------+
mysql> select * from Results; // Hence this table is empty
+--------+-------------+
| Fstuff | Sstuff |
+--------+-------------+
| | |
+--------+-------------+
This stored procedure does a frivolous computation
DELIMITER ##
CREATE PROCEDURE zap(IN sss VARCHAR(30))
BEGIN
INSERT INTO Results (fstuff, Sstuff)
Select
f.F_VALUE * 0 + 123,
s.S_TITLE
FROM F_TABLE f
JOIN S_TABLE s ON s.S_ID=f.S_ID
WHERE s.S_TITLE LIKE CONCAT('%', sss, '%');
END ##
DELIMITER ;
This stored procedure calls zap
DELIMITER ##
CREATE PROCEDURE crap()
BEGIN
DECLARE fTit VARCHAR(30);
DECLARE done INT DEFAULT 0;
DECLARE cur CURSOR FOR SELECT F_TITLE FROM F_TABLE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur;
read_loop: LOOP
FETCH cur INTO fTit;
IF done
THEN LEAVE read_loop;
END IF;
call Zap(fTit);
COMMIT;
END LOOP;
CLOSE cur;
END ##
DELIMITER ;
问题:结果表不受影响?我不知道为什么
【问题讨论】:
标签: mysql sql stored-procedures cursor