不和的Enterprise postgres中的标量表函数

时间:2018-04-20 12:55:01

标签: postgresql plsql oracle11g postgresql-9.4 enterprisedb

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

0 个答案:

没有答案