下面是我在 Oracle 中将游标作为输入参数传递的片段。我试图将其转换为 EntepriseDB。
create or replace FUNCTION FUNCTION_1
(
p_source IN SYS_REFCURSOR
)
is
TYPE row_ntt
IS
TABLE OF VARCHAR2(32767);
v_rows row_ntt;
begin
---
LOOP
FETCH p_source BULK COLLECT
INTO v_rows LIMIT 1000
;
FOR i IN 1 .. v_rows.COUNT
LOOP
-- Will do something here
END LOOP;
EXIT WHEN p_source%NOTFOUND;
END LOOP;
END;
它在 Oracle 中以以下方式调用:
SELECT
*
FROM
TABLE ( function_1(CURSOR(select col1 from tbl)));
现在迁移后
我改变如下
create or replace FUNCTION FUNCTION_1
(
p_source IN SYS_REFCURSOR
)
is
TYPE row_ntt
IS
TABLE OF VARCHAR2(32767);
v_rows row_ntt;
begin
---
select unnest(p_source) into v_rows;
FOR i IN 1 .. v_rows.COUNT
LOOP
-- Will do something here
END LOOP;
END;
我在 EntepriseDB/Postgresql 中以以下方式调用
SELECT
*
FROM
TABLE (function_1(ARRAY(
SELECT
col1 from table)));
我在将值分配给 v_rows 时遇到错误。
ERROR: cannot assign non-table type to a table
请帮助我将 unnest 设置为表类型,以便它插入到 v_rows 中。否则,如果有一种方法可以在 EnterpriseDB 中使用 sysrefcursor 也可以。请让我知道在使用 sysrefcursor 时如何调用 ENtepriseDB。谢谢!!