4.5.4调用返回多结果集的存储过程

 

存储过程同样也可以用来返回多个结果集。如下面的oracle存储过程用游标返回两个结果集:

-  create or replace procedure proAA

-  (

-  out_var out sys_refcursor,

-  out_var2 out sys_refcursor

-  )

-  as

-  begin

-  open out_var for select * from emp;

-  open out_var2 for select * from test;

-  end;

这个简单的存储过程只是返回了emptest两个表的结果集。在集算器中调用这个存储过程,接收两个结果集的程序如下:

 

A

1

=connect("ora")

2

=A1.proc("{call proAA(?,?)}",:101:"o":a,:101:"o":b)

3

=A2(1)

4

=a

5

=b

6

>A1.close()

A2中用proc函数调用存储过程:=A1.proc("{call proAA(?,?)}",:101:"o":a,:101:"o":b),返回了两个结果集(序表),组成了一个序表的集合:序列,赋值给了A2。下面再详细解释一下proc函数中的参数:

SQL字符串"{call proAA(?,?)}"中包含调用存储过程的名字,问号表示SQL的参数。

:101:"o":a中定义了一个输出参数,101代表其数据类型是游标,"o"代表这个参数是输出参数。a是定义了一个变量,可以将返回的结果输出到这个变量,输出参数2

:101:"o":b中定义了一个输出参数,101代表其数据类型是游标,"o"代表这个参数是输出参数。b是定义了一个变量,可以将返回的结果输出到这个变量。

A3单元格返回了A2单元格的第一个序表(emp表的结果集)。

A4A5单元格分别使用A2中的输出变量ab来获取存储过程对应的执行结果,其中a对应emp表的数据,赋值给A4b对应test表的数据,赋值给A5A2中的结果其实就等于A4A5中的序表所构成的序列。