oracle - 如何在没有自定义类型或游标的情况下从 Oracle 函数返回表?

标签 oracle function types cursor

我希望从 Oracle 函数返回结果表。使用游标是最简单的方法,但我必须处理它的应用程序不会接受游标作为返回值。另一种方法是创建一个类型(可能包装在一个包中)以配合此功能。但是,创建多个类型(我有 4 个以上的函数要编写)只是为了返回表结果似乎有些多余。我还缺少其他选择吗?

最佳答案

更新:请参阅无大小限制的 TABLE 解决方案的第一条评论。

返回一个 VARRAY 或使用一个 PIPELINED 函数从中查询。

  • 对于 VARRAY 查找 this文章的细节。那里的代码示例:

    CREATE OR REPLACE TYPE EMPARRAY is VARRAY(20) OF VARCHAR2(30)
    /
    
    CREATE OR REPLACE FUNCTION getEmpArray RETURN EMPARRAY
    AS
      l_data EmpArray := EmpArray();
      CURSOR c_emp IS SELECT ename FROM EMP;
    BEGIN
      FOR emp_rec IN c_emp LOOP
        l_data.extend;
        l_data(l_data.count) := emp_rec.ename;
      END LOOP;
    RETURN l_data;
    

    结束;

  • 对于 PiPELINED 函数结帐 here .代码示例:

    create or replace function Lookups_Fn return lookups_tab
      pipelined
    is
      v_row lookup_row;
    begin
      for j in 1..10
      loop
        v_row :=
          case j
            when 1 then lookup_row ( 1, 'one' )
            --...
            when 7 then lookup_row ( 7, 'seven' )
            else        lookup_row ( j, 'other' )
          end;
        pipe row ( v_row );
      end loop;
      return;
    end Lookups_Fn;
    /
    
    select * from table ( Lookups_Fn );
    

关于oracle - 如何在没有自定义类型或游标的情况下从 Oracle 函数返回表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/608271/

相关文章:

sql - 将 LONG 转换为 VARCHAR2 或某种文本数据类型

Oracle SQL*Plus : Use Substitution Variables Twice

android - Android Studio 可以使用 OpenJDK 还是需要 Linux 上的 Oracle JDK?

javascript - 运行一些代码的 jQuery 函数

types - 为什么编译器需要特征的实现才能调用默认的自由函数?

oracle - SQL*Plus - 如何隐藏 SET ECHO OFF?

r - 如何在r中的函数内将参数传递给函数

function - 将代表软件版本的两个数字与几个点进行比较

javascript - "untyped"在学术 CS 世界中是否也意味着 "dynamically typed"?

python - 我可以在 Python 中创建类方法来接受此类类型的参数吗?