PostgreSQL函数无法正常工作

时间:2011-07-29 12:37:01

标签: sql postgresql

我有一个简单的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问题还是可能是一个bug?

这里需要注意的是,我有许多名为'cola'的列表,是因为PostgreSQL配置问题还是存在?

32位Windows版本的PostgreSQL v8.3

1 个答案:

答案 0 :(得分:1)

你的问题相当含糊,所以我猜这里是黑暗的。你有没有机会,你的功能中已经有一个名为“可乐”的变量?当函数级变量与列名冲突时,变量优先,最终会给查询带来意想不到的结果。

解决方案是重命名函数中的变量。

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