2017-03-01 13 views
0

MSSQL関数をMySQLに変換しようとしています。これまで私が行ってきたことがあります。誰かがそれを見てくださいできますか?このMSSQLカーソル関数をMYSQLに変換するには

ALTER FUNCTION [dbo].[GetCommaDelimitedCategoryIDs] 
(
    @datafeedcategoryinfoid int 
) 
RETURNS varchar(2000) 
AS 
BEGIN 

DECLARE @category_list varchar(4500), @categoryid varchar(20) 
SET @category_list = '' 

    DECLARE category_cursor CURSOR 
    LOCAL FAST_FORWARD FOR 
    SELECT DISTINCT categoryid 
    FROM category_mapping 
    WHERE datafeedcategoryinfoid = @datafeedcategoryinfoid 

    OPEN category_cursor; 

    FETCH NEXT FROM category_cursor 
    INTO @categoryid; 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 

    SET @category_list = @category_list + @categoryid + ',' 

    FETCH NEXT FROM category_cursor 
    INTO @categoryid; 

    END 

    CLOSE category_cursor; 
    DEALLOCATE category_cursor; 

    IF (LEN(@category_list) > 0) 
    SET @category_list = SUBSTRING(@category_list, 1, LEN(@category_list) - 1) 

    RETURN @category_list 


END 

そして、ここでのMySQL関数は

DELIMITER $$ 

CREATE DEFINER=``@`` FUNCTION `GetCommaDelimitedCategoryIDs`(
    p_datafeedcategoryinfoid int 
) RETURNS varchar(2000) CHARSET latin1 
BEGIN 

DECLARE v_category_list varchar(4500); 
DECLARE v_categoryid varchar(20); 
DECLARE category_cursor CURSOR FOR 
    SELECT DISTINCT categoryid 
    FROM category_mapping 
    WHERE datafeedcategoryinfoid = p_datafeedcategoryinfoid; 

    SET v_category_list = ''; 
    OPEN category_cursor; 

    myloop: LOOP 
    FETCH category_cursor INTO v_categoryid; 
    IF done THEN 
     LEAVE myloop; 
    END IF; 
    SET v_category_list = Concat(v_category_list , v_categoryid , ','); 
    FETCH category_cursor INTO v_categoryid; 

    END LOOP; 

    CLOSE category_cursor; 


    IF (CHAR_LENGTH(RTRIM(v_category_list)) > 0) THEN 
    SET v_category_list = SUBSTRING(v_category_list, 1, CHAR_LENGTH(RTRIM(v_category_list)) - 1); 
    END IF; 

    RETURN v_category_list; 


END 

である。しかし上記の関数は値を返しません。 Mysql Workbenchはエラーを返しません。どうすればデバッグできますか?

+1

これは 'group_concat()'の仕事ではありませんか? – SqlZim

答えて

2

これはgroup_concat()の仕事ではありませんか?次のようなものがあります。

select group_concat(distinct categoryid order by categoryid SEPARATOR ',') 
from category_mapping 
where datafeedcategoryinfoid = p_datafeedcategoryinfoid; 

ここはdemo of group_concat()です。

+0

あなたはもっと具体的になりますか?私は上記のselect文をあなたのものと置き換えるべきですか? – Sravsk

+0

@sravskあなたはカスタム関数をまったく必要としません。mysqlの 'group_concat()'を使用することができます – SqlZim

+0

上記の解決策が働きました。代わりにしていただきありがとうございます。 – Sravsk

関連する問題