0

下面是我在 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。谢谢!!

4

0 回答 0