Можно ли написать функцию SQL в PostgreSQL, чтобы возвращать более одного типа данных? - PullRequest
0 голосов
/ 07 августа 2020

Я работаю над проблемой совместимости, я хочу создать функцию SQL, которая может возвращать int или Varchar в зависимости от условий в программе.

Например, у меня есть функция с именем foo.

CREATE or REPLACE FUNCTION foo(param VARCHAR(100))
-- Which datatype I should use here?
RETURNS SOME_DATATYPE AS
$$
  SELECT
    CASE UPPER(param)
        WHEN 'varchar'  THEN CAST((SELECT 'varchar_value') AS varchar)
        WHEN 'int'      THEN CAST((SELECT 1426598) AS int)
        ELSE param||' is not supported.'
        END
$$
LANGUAGE SQL;

Для следующих запросов я ожидаю, что результат будет следующим.

select pg_typeof(foo('varchar')) from dual;
--I am expecting varchar as output.

select pg_typeof(foo('int')) from dual;
--I am expecting int as output.

Пожалуйста, предложите, есть ли такая функция, Или любую альтернативу, которую я могу попытаться достичь то же.

1 Ответ

2 голосов
/ 07 августа 2020

Ближе всего было бы перегрузить функцию:

create or replace function foo(param text)
  returns text
$$
select param;
$$
language sql;

create or replace function foo(param int)
  returns int
$$
select param;
$$
language sql;

create or replace function foo(param date)
  returns int
$$
select param;
$$
language sql;

...