gpt4 book ai didi

MySQL 存储过程无法产生结果

转载 作者:行者123 更新时间:2023-11-29 07:02:20 26 4
gpt4 key购买 nike

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 |
+--------+-------------+
| | |
+--------+-------------+

这个存储过程进行了一些简单的计算

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 ;

此存储过程调用 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 ;

问题:结果表不受影响?我想不通为什么

最佳答案

您从 F_TABLE.F_TITLE 中读出名称(Delta、Gamma...)并在 S_TABLE.S_TITLE 中查找它们,但没有找到匹配项。

crap 中的光标应该使用与 zap 过程相同的标题列。

编辑:

游标 cur CURSOR FOR SELECT F_TITLE FROM F_TABLE; 将获取 'Delta'、'Gamma' 等到 fTit 中。然后 Zap() 被调用:Zap('Delta'), Zap('Gamma')

Zap 过程将创建一个匹配字符串 '%Delta%''%Gamma%' 等等并寻找这个在您列出的第一个表中。由于该表包含“Jim”、“George”和其他名称,因此没有匹配项。 SELECT 不返回任何行,因此在对 zap 的任何调用中都没有插入任何内容。

如果您将光标改为查看 S_TABLE,您将插入行,但可能不是您想要的行。请在结果表中详细说明您的期望。

关于MySQL 存储过程无法产生结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9457463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com