以下是我在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
请帮我制作不需要的表格类型,以便插入v_rows。或者如果有一种方法我可以在EnterpriseDB中使用sysrefcursor也没关系。请告诉我在使用sysrefcursor时如何调用ENtepriseDB。谢谢!