【问题标题】:Declare Cursor dynamically动态声明游标
【发布时间】:2012-02-04 05:13:21
【问题描述】:

我需要根据我所处的情况在存储过程中动态创建游标,理想如下:

IF (varOrgGroupCode = '') THEN
BEGIN
DECLARE groupCode CURSOR FOR
SELECT `groupcode` FROM `LICENSEKEYS`;
END;
ELSE
BEGIN
DECLARE groupCode CURSOR FOR
SELECT `groupcode` FROM `LICENSEKEYS` WHERE `groupcode` = varOrgGroupCode;  
END;
END IF;

上面的代码会导致语法错误。我用谷歌搜索过,有人用临时表做到了。谁能告诉我怎么做?

【问题讨论】:

  • 它给出了什么语法错误?

标签: mysql loops cursor procedure


【解决方案1】:

您在 Google 上找到的可能是创建一个临时表,根据您的谓词填充该临时表,然后在游标声明中引用该临时表。

类似这样的:

DELIMITER $$

CREATE PROCEDURE `some_procedure`(IN varOrgGroupCode varchar(100))
BEGIN

DECLARE bNoMoreRows BOOLEAN DEFAULT FALSE;
DECLARE vGroupCode varchar(100);

DECLARE groupCode CURSOR FOR
SELECT `groupcode` FROM `LICENSEKEYS_TEMP`;

declare continue handler for not found set bNoMoreRows := true; 

BEGIN

  drop table if exists LICENSEKEYS_TEMP;

  create temporary table `LICENSEKEYS_TEMP` (groupCode varchar(100));

  IF (varOrgGroupCode = '') THEN
    insert into `LICENSEKEYS_TEMP` (groupCode) SELECT `groupcode` FROM `LICENSEKEYS`;
  ELSE
    insert into `LICENSEKEYS_TEMP` (groupCode) SELECT `groupcode` FROM `LICENSEKEYS` WHERE `groupcode` = varOrgGroupCode;  
  END IF;

  open groupCode;

  GROUPCODE_LOOP: loop

   fetch groupCode into vGroupCode;

   -- Do some stuff

   if bNoMoreRows then
      close groupCode;
      leave GROUPCODE_LOOP;
   end if;

  END LOOP GROUPCODE_LOOP;

 END;

END$$

DELIMITER ;

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多