【问题标题】:PLpgPSQL Function - return string if no results foundPLpgPSQL 函数 - 如果没有找到结果则返回字符串
【发布时间】:2019-10-22 10:49:52
【问题描述】:

我有这个电影数据库的功能

CREATE OR REPLACE FUNCTION Q10 (partial_title text)
   RETURNS setof text
AS $$
BEGIN
   RETURN QUERY SELECT
      concat(title, ' has ', count, ' cast and crew')_

   FROM
      total_size
   WHERE
      title ILIKE '%' || partial_title || '%';

END; $$
LANGUAGE 'plpgsql';

当我的视图 total_size 中没有标题时,我需要它返回字符串“未找到匹配项”而不仅仅是“O 行”。

有什么想法吗?干杯

【问题讨论】:

  • 老实说,我认为最优雅的解决方案是让您的函数保持原样,并在结果集为空的情况下返回null。然后,让调用者决定如何处理(例如使用COALESCE)。
  • 我会,但如果它不返回字符串“未找到匹配项”,我将在我的作业中被标记:(

标签: postgresql plpgsql stored-functions


【解决方案1】:

您可以使用带有 NOT EXISTS 条件的 UNION,但我认为这不值得。

PL/pgSQL 函数也不需要,language sql 就足够了(而且效率更高):

CREATE OR REPLACE FUNCTION Q10 (partial_title text)
   RETURNS table (title text)
AS 
$$
  with movies as (
    SELECT concat(title, ' has ', count, ' cast and crew')
    FROM total_size
    WHERE title ILIKE '%' || partial_title || '%'
  ) 
  select *
  from movies
  union all
  select 'No matches found'
  where not exists (select * 
                    from movies);
$$
LANGUAGE sql;

【讨论】:

  • 我想发布 think,但认为它不是很干净,但无论如何 +1 给你。
  • @TimBiegeleisen:我想不出更好的方法(但我同意,感觉有点笨拙)
猜你喜欢
  • 2023-04-04
  • 2014-04-08
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 2020-07-06
  • 2012-03-05
相关资源
最近更新 更多