PostgreSQL函数参数未正确传递

时间:2016-09-27 09:35:25

标签: postgresql plpgsql

我有一个函数接受一个参数,该参数意味着传递给 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

1 个答案:

答案 0 :(得分:3)

您的功能有两个问题:

  1. 请勿使用character - 使用textvarchar代替
  2. 不要将参数名称放在单引号中
  3. 与您的问题无关,但一个简单的“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;
    

    对参数和局部变量使用某种前缀来避免它们与列名之间的名称冲突也是一种很好的编码约定。