我有一个函数接受一个参数,该参数将被传递给 RETURN QUERY 并且数据是从底层 View 输入的。
现在我在执行函数时得到零行,但是当我自己运行 select 语句时,我得到了结果。
所以我的一部分认为
函数参数根本没有被读取。感谢您提供任何帮助/建议。
create or replace function my_trans(IN inid character)
RETURNS TABLE(
a_date timestamp without time zone,
pnt_sys character,
nval numeric,
pnt_type character,
gpid integer)
as $$
#variable_conflict use_column
BEGIN
RETURN QUERY
SELECT
BORN_DATE,
MY_SYSTEM,
MY_VALUE,
MY_TYPE,
MY_PAY_ID
FROM vw_psr where nid ~* '$1';
end;
$$ language plpgsql
最佳答案
你的函数有两个问题:
- 不要使用
character
- 使用text
或varchar
代替 - 不要将参数名称放在单引号中
与您的问题无关,但是一个简单的“SELECT 函数”最好写成一个普通的 SQL 函数:
create or replace function my_trans(p_inid text)
RETURNS TABLE(
a_date timestamp without time zone,
pnt_sys character,
nval numeric,
pnt_type character,
gpid integer)
as $$
SELECT BORN_DATE,
MY_SYSTEM,
MY_VALUE,
MY_TYPE,
MY_PAY_ID
FROM vw_psr
where nid ~* p_inid;
$$ language sql;
为参数和局部变量使用某种前缀以避免它们与列名之间的名称冲突也是一个很好的编码约定。
关于未正确传递 PostgreSQL 函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39721165/