首页 > 解决方案 > 是否允许在 PostgreSQL 中编写 SQL 函数以返回一种以上的数据类型?

问题描述

我正在处理一个兼容性问题,我想创建一个 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.

请建议是否存在这样的功能,或者我可以尝试实现相同功能的任何替代方案。

标签: sqlpostgresqlstored-functions

解决方案


最接近的事情是重载函数:

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;


推荐阅读