未正确传递 PostgreSQL 函数参数

标签 postgresql plpgsql

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

最佳答案

你的函数有两个问题:

  1. 不要使用 character - 使用 textvarchar 代替
  2. 不要将参数名称放在单引号中

与您的问题无关,但是一个简单的“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/

相关文章:

SQL - Postgres - 返回最新日期的最大值

postgresql - 使用 slick 的 3.0.0 流式结果和 Postgresql 的正确方法是什么?

postgresql - Play 的进化并没有在 Heroku 上运行

sql - 从表中选择一组动态列并获取每个列的总和

regex - PL/pgSQL 中的正则表达式替换

sql - 如何在Postgresql中查询MAX(SUM(relation))?

php - 处理并发问题的最佳方法

postgresql - 转换时间戳给出 future 的结果

sql - 使用该函数的参数从存储函数创建 View

postgresql - 使用 PLPGSQL 函数生成连接查询