我有一个函数接受一个参数,该参数意味着传递给 RETURN QUERY ,数据从底层视图输入。 现在我在执行函数时得到零行,但是当我在它上面运行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
答案 0 :(得分:3)
您的功能有两个问题:
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;
对参数和局部变量使用某种前缀来避免它们与列名之间的名称冲突也是一种很好的编码约定。