2012-01-06 72 views
1

我需要根据我在什么情况下在存储过程中动态创建光标,理想是低于:声明游标动态

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; 

上面的代码将导致语法错误。我用google搜索&有人用临时表做了。谁能告诉我怎么样?

+0

没有给出什么语法错误? – Rahul 2012-01-06 13:30:34

回答

5

也许你在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 ;