For loop 循环语法的mariadb过程

For loop 循环语法的mariadb过程,for-loop,stored-procedures,mariadb,For Loop,Stored Procedures,Mariadb,为什么这些程序不能产生相同的结果?为什么我犯了错误1329 CREATE TABLE TABA (A INT, B INT); CREATE TABLE TABB (A INT, B INT); INSERT INTO TABA VALUES (1, 11), (2, 22); INSERT INTO TABB VALUES (1, 110), (2, 220); 我想我也得到了类似的结果。如果我手动运行这两个SELECT语句,它们就会工作 谢谢SP语法既神秘又古老。再多读一些文档。我已经从M

为什么这些程序不能产生相同的结果?为什么我犯了错误1329

CREATE TABLE TABA (A INT, B INT);
CREATE TABLE TABB (A INT, B INT);
INSERT INTO TABA VALUES (1, 11), (2, 22);
INSERT INTO TABB VALUES (1, 110), (2, 220);
我想我也得到了类似的结果。如果我手动运行这两个SELECT语句,它们就会工作


谢谢

SP语法既神秘又古老。再多读一些文档。我已经从MariaDB knowlegde base中读了一些。最后我使用了游标语法,但我很想知道FOR循环是如何工作的。FOR在10.3中是新的:
DROP PROCEDURE IF EXISTS testa;
DELIMITER //
CREATE PROCEDURE testa (IN tp1 INT)
 BEGIN
  FOR fp1 IN (SELECT TABA.A FROM TABA WHERE TABA.B LIKE tp1)
  DO
   SELECT * FROM TABB WHERE TABB.A LIKE fp1;
  END FOR;
 END;
//
DELIMITER ;
DROP PROCEDURE IF EXISTS testb;
DELIMITER //
CREATE PROCEDURE testb (IN tp1 INT)
 BEGIN
  DECLARE fp1 INT;
  DECLARE cur1 CURSOR FOR SELECT TABA.A FROM TABA WHERE TABA.B LIKE tp1;
  OPEN cur1;
  loopa: LOOP
  FETCH cur1 INTO fp1;
   SELECT * FROM TABB WHERE TABB.A LIKE fp1;
 END LOOP;
 CLOSE cur1;
END; 
//
DELIMITER ;
CALL testa(11);
ERROR 1241 (21000): Operand should contain 1 column(s)
CALL testb(11);
+------+------+
| A    | B    |
+------+------+
|    1 |  110 |
+------+------+
1 row in set (0.000 sec)

ERROR 1329 (02000): No data - zero rows fetched, selected, or processed