PostgreSQL函数无法正常工作。

4
我有一个简单的PostgreSQL函数,类似下面这样:
CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS '
BEGIN
    OPEN $1 FOR 

    SELECT col 
    FROM   test
    WHERE  cola = 1;

    RETURN $1;
END;
' LANGUAGE plpgsql;

问题在于,当我运行以下SQL语句时,假设我会得到10行结果。

    SELECT col 
    FROM   test
    WHERE  cola = 1;

但当我调用该函数时,返回了0行数据。后来在修改脚本后,发现以下方式可以解决问题。

CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS '
BEGIN
    OPEN $1 FOR 

    SELECT col 
    FROM   test     t
    WHERE  t.cola = 1;

    RETURN $1;
END;
' LANGUAGE plpgsql;

并返回所需的行。

我知道这不是一个纯粹的SQL问题,但这是一个众所周知的PostgreSQL问题还是可能是一个错误?

需要注意的一点是,我有许多表格的列名为“cola”,这是原因还是有PostgreSQL配置问题?

32位Windows版本的PostgreSQL v8.3

1个回答

1

你的问题描述得相当模糊,所以我只能凭空猜测。你的函数里面有没有可能已经有一个叫做“cola”的变量?当函数级别的变量与列名冲突时,变量会优先起作用,导致查询结果完全出乎意料。

解决办法是在函数中重新命名变量。

这是 PL/pgSQL 中非常常见的陷阱。PostgreSQL 9.0 及更高版本可以检测到这种冲突。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接