2012-01-06 64 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 ;