2012-01-06 1 views
1

Мне нужно создать курсоры динамически в хранимой процедуре на основе какой ситуации я нахожусь, в идеале ниже:Declare Cursor динамически

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; 

Код выше приведет к синтаксической ошибке. Я googled & кто-то сделал это, используя временную таблицу. Может ли кто-нибудь сказать мне, пожалуйста?

+0

, что ошибка синтаксиса, что это дает? – Rahul

ответ

5

Возможно, что вы обнаружили в Google, чтобы создать временную таблицу, заполнить эту временную таблицу на основе вашего предиката, а затем ссылаться на таблицу temp в объявлении курсора.

Что-то вроде этого:

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 ;