从函数 oracle 返回一个可变数组

Posted

技术标签:

【中文标题】从函数 oracle 返回一个可变数组【英文标题】:return a varray from a function oracle 【发布时间】:2016-10-07 09:53:22 【问题描述】:

我想从 oracle 函数返回一个可变数组,但我不知道该怎么做。 到目前为止,这是我尝试过的。

set serveroutput on;
declare
   type array_t is varray(2) of number;
CREATE OR REPLACE FUNCTION func() return array_t
begin
  array array_t :=array_t(0,0);   
  array(1):=3;
  array(2):=20;
  return array;
end;

【问题讨论】:

【参考方案1】:

hier 是适合你的函数的语法

 create  type array_t is varray(2) of number;
 /

 CREATE OR REPLACE FUNCTION func return array_t
 IS
  v_array  array_t;
begin
  v_array  :=array_t(0,0);   
  v_array(1):=3;
  v_array(2):=20;
  return v_array;
end;
/

您可以在匿名 plsql 块中调用该函数

declare
  v_func_result array_t;
begin

 v_func_result := func();

 dbms_output.put_line(v_func_result(1));
 dbms_output.put_line(v_func_result(2));
 end;
/

【讨论】:

@schurik 能否请你也举个例子来说明如何调用这个函数。 从对偶中选择函数; @XING 我的意思是当我尝试调用这样的函数时 v_array := func();我得到错误。 @PrashantBhanarkar 我已经用函数调用的例子完成了我的回答 @schurik 我们可以从选择查询中调用这个函数吗?【参考方案2】:

您不需要在 SQL 范围内声明过程;您可以将其声明为nested sub-program in an anonymous PL/SQL block:

SET SERVEROUTPUT ON;

DECLARE
  TYPE array_t IS VARRAY(2) OF NUMBER;

  data array_t;

  FUNCTION func RETURN array_t IS BEGIN RETURN array_t( 3, 20 ); END func;
BEGIN
  data := func();
  DBMS_OUTPUT.PUT_LINE( '(' || data(1) || ', ' || data(2) || ')' );
END;
/

【讨论】:

以上是关于从函数 oracle 返回一个可变数组的主要内容,如果未能解决你的问题,请参考以下文章

从函数中的 void * 参数返回数组

函数返回可变数组错误

Oracle PL/SQL:如何使用可变数组作为输出参数执行过程?

在其内存应该已被释放后访问可变长度数组

excel VBA - 从函数中重新获得可变长度数组

是否需要从堆栈中分配 C 可变长度数组?