2012-01-06 10 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

答えて

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 ; 
関連する問題