如何在不声明函数类型的情况下使用语言sql从函数返回自定义类型?

时间:2018-05-02 08:53:03

标签: postgresql

在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,我们是否可以做同样的事情?

2 个答案:

答案 0 :(得分:1)

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

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; 

答案 1 :(得分:0)

或仅使用SQL

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