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はエラーを返しません。どうすればデバッグできますか?
これは 'group_concat()'の仕事ではありませんか? – SqlZim