Как вернуть пользовательский тип из функции с использованием языка SQL без объявления типа в функции? - PullRequest
0 голосов
/ 02 мая 2018

Просто читая этот ответ о , используя новый тип для возврата нескольких полей в PostgreSQL.

Так что мы можем сделать это.

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 голосов
/ 02 мая 2018

Или используя только SQL

select cast((r[1], r[2], r[3]) as my_type) from regexp_split_to_array('a.b.c', '\.') r;
0 голосов
/ 02 мая 2018

Хорошо, поэтому этот вопрос, вероятно, не следовало задавать, потому что ответ почти интуитивно понятен.

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; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...