【问题标题】:Postgresql functionsPostgresql 函数
【发布时间】:2017-09-29 19:22:29
【问题描述】:

这些是提供给我的类型定义

create type IR as (pattern_number integer, uoc_number integer);

我目前的进度是:

create or replace function q1(pattern text, uoc_threshold integer)
  returns setof IR
  as $$
  BEGIN
    RETURN QUERY
    select count(code) from temp where code like $1;
    RETURN QUERY 
    select count(code) from temp where code like $1 and uoc > $2;

  END;
$$ language plpgsql;

我的输出需要是这样的: 查询:-

select * 
from q1('ECO%', 6);

pattern_number  |   uoc_number 
80              |         5      

我收到一条错误消息:

错误:查询结构与函数结果类型不匹配
详细信息:返回的类型 bigint 与第 1 列中的预期类型整数不匹配。
上下文:PL/pgSQL 函数 q1(text,integer) 第 3 行的 RETURN QUERY

我该如何解决这个问题?

【问题讨论】:

  • 您的函数返回两行和一个 (bigint) 列。您需要单行和单列作为记录。
  • 我说对了吗?你想要 select count(code) from temp where code like $1 作为 pattern_number 和 select count(code) from temp where code like $1 and uoc > $2 作为 uoc_number 吗?.. 我用代码添加了答案 - 原文如此?
  • @VaoTsun 是的。这正是我想要的,但您的回答似乎无法解决错误

标签: sql postgresql plpgsql


【解决方案1】:

这是你想要的吗?..

create or replace function q1(pattern text, uoc_threshold integer)
  returns setof IR
  as $$
  BEGIN
    RETURN QUERY
    select (select count(code) from temp where code like $1)::integer
    ,(
    select count(code) from temp where code like $1 and uoc > $2)::integer;

  END;
$$ language plpgsql;

【讨论】:

  • 您做对了,但错误仍然存​​在。这是完全相同的错误。
猜你喜欢
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2018-12-15
  • 2021-12-09
  • 2021-02-04
  • 2011-12-31
相关资源
最近更新 更多