【发布时间】:2021-05-21 15:25:49
【问题描述】:
目前正在将 Oracle 数据库迁移到 Postgres,我遇到了一个被卡住的用例。 在 Oracle 中,我有一个返回 3 个值的过程
- SELECT 查询的结果集(这是一个 Oracle ref_cursor)
- 一条消息
- 一种状态
这是Oracle中的过程
CREATE OR REPLACE PROCEDURE ORA_TEST (
I_EMP_ACTIVE IN VARCHAR2,
O_RESULTSET OUT SYS_REFCURSOR
O_MESSAGE OUT VARCHAR2
O_STATUS OUT VARCHAR2)
AS
V_COUNT NUMBER;
BEGIN
SELECT COUNT(*) INTO V_COUNT FROM EMPLOYEE WHERE EMP_ACTIVE=I_EMP_ACTIVE;
IF V_COUNT>0
OPEN O_RESULTSET FOR SELECT * FROM EMPLOYEE WHERE EMP_ACTIVE=I_EMP_ACTIVE;
O_STATUS := 'SUCCESS';
O_MESSAGE := 'Search Results found';
ELSE
O_STATUS := 'FAILURE';
O_MESSAGE := 'No Search Results found';
END IF;
END;
现在,当我尝试在 Postgres 中将此过程创建为函数时,我可以将结果集作为 TABLE 或 SETOF RECORD 返回,但我无法将 O_MESSAGE 和 O_STATUS 与结果集一起返回。
请注意,我无法使用 Postgres ref_cursor 返回结果集(这是因为我们在从 API 访问 ref_cursor 时遇到了一些问题,这就是我们使用 TABLE、SETOF RECORD 或 SETOF TYPE 返回结果集的原因)。
是否有任何方法可以实现这种类型的结果集(使用 TABLE 以及 2 个 varchar 列)?
【问题讨论】:
-
函数和过程是两个不同的东西。 函数应该返回单个值,并在某种情况下将该单个值分配给某物。
-
是的,我明白这一点,但有什么方法可以获得所需的输出吗?我对函数或过程没有任何问题,但 AFAIK Postgres 过程不能将复杂数据类型的记录集作为 OUT 参数
标签: postgresql oracle