Mysql:不允许从函数返回结果集

时间:2014-08-14 10:34:36

标签: mysql

我编写了一个函数,但收到此错误不允许从函数返回结果集

DELIMITER $$

CREATE FUNCTION getTestFunction
(
    p_ParentID int,
    p_ListName nvarchar(50),
    p_Type nvarchar(50),
    p_Count int 
)
RETURNS nvarchar(2000)
BEGIN
    DECLARE p_KeyValue nvarchar(2000);
    DECLARE p_ListValue nvarchar(2000);
    DECLARE p_TextValue nvarchar(2000);
    DECLARE p_ReturnValue nvarchar(2000);
    DECLARE p_Key nvarchar(2000);

    IF p_ParentID = 0 THEN
        IF p_Count = 0 THEN
            SET p_ReturnValue = '';
        ELSE
            SET p_ReturnValue = p_ListName;
        END IF;
    ELSE

            SELECT  p_KeyValue = ListName + '.' + Value

                FROM ListsTable
                WHERE EntryID = p_ParentID  LIMIT 1 ;
RETURN    p_ReturnValue;
            If p_Type = 'ParentKey' Or (p_Type = 'ParentList' AND p_Count > 0) THEN
                SET p_ReturnValue = p_KeyValue;
            ELSE 
                IF p_Type = 'ParentList' THEN
                    SET p_ReturnValue = p_ListValue;
                ELSE
                    SET p_ReturnValue = p_TextValue;
                END IF;
            END IF;

            IF p_Count > 0 THEN
                If p_Count = 1 AND p_Type = 'ParentList' THEN
                    SET p_ReturnValue = p_ReturnValue + ':' + p_ListName;
                ELSE
                    SET p_ReturnValue = p_ReturnValue + '.' + p_ListName;
                END IF;
            END IF;

    END IF; 
    RETURN    p_ReturnValue;
END$$
DELIMITER ;

2 个答案:

答案 0 :(得分:1)

您希望将查询结果分配给变量,但实际上您只需select。这就是MySQL抱怨的原因。

你必须改变这个

            SELECT  p_KeyValue = ListName + '.' + Value
            FROM ListsTable
            WHERE EntryID = p_ParentID  LIMIT 1 ;

            SELECT CONCAT(ListName, '.', `Value`)
            INTO p_KeyValue
            FROM ListsTable
            WHERE EntryID = p_ParentID  LIMIT 1 ;

您应该添加ORDER BY。没有LIMIT的{​​{1}}没有意义,因为关系数据库中没有保证订单。

答案 1 :(得分:1)

Mysql抱怨函数中的SELECT语句,

可能它理解SELECT p_KeyValue = ListName +'。' +值作为比较

将其更改为

SELECT CONCAT(ListName, '.', Value) INTO p_KeyValue