我有一个简单的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
答案 0 :(得分:1)
你的问题相当含糊,所以我猜这里是黑暗的。你有没有机会,你的功能中已经有一个名为“可乐”的变量?当函数级变量与列名冲突时,变量优先,最终会给查询带来意想不到的结果。
解决方案是重命名函数中的变量。
这是PL / pgSQL中一个非常常见的陷阱。 PostgreSQL 9.0和更新版本可以检测到这种冲突。