【问题标题】:How to return a custom type from a function using language sql without declaring the type in the function?如何使用语言 sql 从函数返回自定义类型而不在函数中声明类型?
【发布时间】:2018-10-12 07:53:14
【问题描述】:

刚刚在 PostgreSQL 中阅读有关 using a new type to return multiple fields 的答案。

所以我们可以这样做。

CREATE TYPE my_type AS (a text, b text, c text)

CREATE OR REPLACE FUNCTION get() 
RETURNS my_type AS 
$$
DECLARE
  result_record my_type;

BEGIN
  SELECT r[1], r[2], r[3]
  INTO result_record.a, result_record.b, result_record.c
  FROM regexp_split_to_array('a.b.c', '\.') r;

  RETURN result_record;
END
$$ LANGUAGE plpgsql; 

我想知道我们是否可以在不声明函数中的自定义类型和/或使用语言 sql 而不是 plpgsql 的情况下做同样的事情?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    或者只使用 SQL

    select cast((r[1], r[2], r[3]) as my_type) from regexp_split_to_array('a.b.c', '\.') r;
    

    【讨论】:

      【解决方案2】:

      好的,所以这个问题可能不应该问,因为答案几乎是直观的。

      CREATE OR REPLACE FUNCTION get2() 
      RETURNS my_type AS 
      $$
        SELECT r[1] AS a, r[2] AS b, r[3] AS c 
        FROM regexp_split_to_array('a.b.c', '\.') r;
      $$ LANGUAGE sql; 
      

      【讨论】:

      • 或者:select (r[1], r[2], r[3])::my_type ...
      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2012-09-26
      • 1970-01-01
      • 2019-05-07
      • 2021-03-23
      相关资源
      最近更新 更多