2012-11-09 81 views
3

我想使一個MySQL存儲過程MySQL的存儲過程的查詢

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `SECTOR_INDUSTRY_SP` $$ 
CREATE PROCEDURE `SECTOR_INDUSTRY_SP`(IN RINSERIES TEXT, IN COMMUNITYIDS TEXT) 
    READS SQL DATA 
BEGIN 
SELECT * 
from PROFESSIONAL_IDENTITY_MERGED p , std_company_detail s 
where (p.pim_company_id = s.cid) AND p.pim_community_id IN ('+'+COMMUNITYIDS+'+') 
AND p.pim_rin IN ('+'+RINSERIES+'+'); 

END $$ 

DELIMITER ; 

正如你可以看到我有兩個參數同樣調用這個過程RINSERIES這將是文本格式,如「12312,1234,1239」 COMMUNITYIDS就像是「2,5,8」,但我會通過,這是解釋像

SELECT * 
    from PROFESSIONAL_IDENTITY_MERGED p , std_company_detail s 
    where (p.pim_company_id = s.cid) AND p.pim_community_id IN ('12312,1234,1239') 
    AND p.pim_rin IN ('2,5,8'); 

但我想這個查詢看起來像以下

SELECT * 
     from PROFESSIONAL_IDENTITY_MERGED p , std_company_detail s 
     where (p.pim_company_id = s.cid) AND p.pim_community_id IN (12312,1234,1239) 
     AND p.pim_rin IN (2,5,8); 

我該怎麼做?謝謝!

回答

3

試試這個:

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `SECTOR_INDUSTRY_SP` $$ 
CREATE PROCEDURE `SECTOR_INDUSTRY_SP`(IN RINSERIES TEXT, IN COMMUNITYIDS TEXT) 
    READS SQL DATA 
BEGIN 

SET @s = CONCAT("SELECT * 
from PROFESSIONAL_IDENTITY_MERGED p , std_company_detail s 
where (p.pim_company_id = s.cid) AND p.pim_community_id IN (", COMMUNITYIDS, ") 
AND p.pim_rin IN (",RINSERIES,")"); 

PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

END $$ 

DELIMITER ; 
+0

謝謝!它真的很好。 –

+0

它可以用於聲明遊標嗎? –