sql - 是否允许在 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.
请建议是否存在这样的功能,或者我可以尝试实现相同功能的任何替代方案。
解决方案
最接近的事情是重载函数:
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;
推荐阅读
- excel - 如何在可编辑的工作表内显示对外部数据源的查找?
- mysql - 如何从最小索引到最大索引对 SQL 结果进行排序?
- python - PySpark replace() 函数不会用 NULL 值替换整数
- java - 无效的请求。缺少 X-Goog-Upload-Command 标头
- python - 用于解决 XOR 问题的 MLP 的 Pytorch 实现给出了错误的预测
- java - 如何在新方法中的方法中运行 if 语句的相同结果
- php - 如何在 2021 年获取 PHP 中 URL 的 Facebook 评论计数?
- python - Python 多阶段 docker 容器 - 本地包
- docker - 错误:(根)不允许附加属性层
- aws-lambda - C# AWS lambda 随机调用 HTTP 端点给出 BadGateway