函数的最终语句必须为SELECT或INSERT UPDATE DELETE RETURNING

时间:2018-12-20 16:56:57

标签: postgresql function plpgsql overloading

CREATE FUNCTION retrieve_add_friends(user_id text[]) 
RETURNS SETOF user_rows AS
$BODY$
BEGIN
    FOR user_rows IN EXECUTE SELECT * FROM user_details where user_id= $1
    LOOP

        FOR user_friends IN EXECUTE SELECT * FROM user_add_friends where user_id= $1
        LOOP
            IF user_rows.user_id!=user_friends.user_friend_id THEN
            RETURN NEXT user_rows;  
            END IF;
        END LOOP;

    RETURN;
    END LOOP;
    RETURN;
END
$BODY$
 language plpgsql VOLATILE;

执行此操作时,出现以下错误:

  

错误:声明为返回user_details的函数中的返回类型不匹配
  详细信息:函数的最终语句必须为SELECT或INSERT / UPDATE / DELETE RETURNING。   上下文:SQL函数“ retrieve_add_friends”

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

显示的函数是PL / pgSQL函数。

显然,您正在调用不同的函数(一种SQL函数)(对于该错误,msg才有意义):

  

SQL函数“ retrieve_add_friends”

相同的函数名称,但参数不同(并且可能在不同的数据库模式中)。您是否知道function overloading及其含义?

相关:

快速诊断:

SELECT oid::regprocedure AS function_signature, *
FROM   pg_proc
WHERE  proname = 'retrieve_add_friends';

除此之外,显示的功能有多个错误,可以用普通的SELECT代替。