带while循环的嵌套游标

2izufjch  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(430)

我想用while循环编写一个嵌套游标,这样当表\u a中的列\u name与表\u b的col1匹配时,就可以从表\u b中获得结果。
如果从表\u b中选择col1、col2、col3,其中col1=tbla\u col1为空,则转到下一行并返回col1。
我需要将列结果保存在变量中。

Delimiter $$
  DROP PROCEDURE IF EXISTS sp_test;
  CREATE PROCEDURE sp_test() 
  begin 
    DECLARE done, done1 int DEFAULT 0; 
    DECLARE tblA_col1 varchar(255); 
    DECLARE tblB_col1 varchar(255);
    DECLARE tblB_col2 varchar(255);
    DECLARE tblB_col3 varchar(255);
      DECLARE curA CURSOR FOR   SELECT column_name   FROM   Table_A; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 
    open curA; 

      WHILE (done = 0) do
      FETCH next   FROM  curA   INTO  tblA_col1;
     DECLARE curB CURSOR FOR   select col1, col2, col3 from Table_B where col1 = tblA_col1;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done1 = 1; 
      open curB;
    Fetch next from curB into tblB_col1,tblB_col2,tblB_col3;
    select tblB_col1;
   select tblB_col2;
    select tblB_col3;
    close curB;
  if tblB_col1 is null then 
  tblB_col1 = tblB_col1;
  end if;

    end while;
    close curA;
    end;
    $$
  --  call sp_test

我是新来的游标和我有问题,而使用嵌套的路缘。你能帮忙吗?

mbjcgjjk

mbjcgjjk1#

我注意到的唯一明显的语法问题是循环中的声明。
只允许在begin中声明。。。结束复合语句,并且必须在其开始处,在任何其他语句之前。
https://dev.mysql.com/doc/refman/8.0/en/declare.html
如果在第一次获取之后放置begin,在关闭curb之后放置end,那么没有确切指定have的问题可能会得到解决。您可能还需要在每个外部迭代中重置done1(我不记得它是否会保留以前迭代的值)

相关问题