存储过程更多的情况下会被用来返回结果集。如下面的存储过程RQ_TEST_CUR会返回单个结果集:
- CREATE OR REPLACE PROCEDURE RQ_TEST_CUR
- (
- V_TEMP OUT TYPE.RQ_REF_CURSOR,
- PID IN VARCHAR
- )
- AS
- BEGIN
- OPEN V_TEMP FOR SELECT * FROM TEST WHERE ID =PID;
- END RQ_TEST_CUR;
这个存储过程中输入一个参数,并用游标返回了一个结果集。在集算器中调用这个存储过程的代码如下:
|
A |
1 |
=connect("ora") |
2 |
=A1.proc("{call RQ_TEST_CUR(?,?)}",:101:"o":table1,1:0:"i":) |
3 |
=table1 |
4 |
>A1.close() |
A2单元格使用proc函数调用存储过程:=A1.proc("{call RQ_TEST_CUR(?,?)}", :101:"o":table1, 1:0:"i":)。下面依次解释一下proc函数中设定的参数:
SQL字符串"{call RQ_TEST_CUR(?,?)}"中包含调用存储过程的名字,问号表示SQL的参数。
再来看存储过程中的参数:
:101:"o":table1定义了一个输出参数,第一个冒号前留空表示没有输入值,101代表其数据类型是游标,"o"代表这个参数是输出参数。table1是定义了一个变量,可以用这个变量引用返回结果。
1:0:"i":定义了一个输入参数,1是输入参数的值,0表示输入参数的类型是由集算器自动识别,"i"代表这个参数是输入参数,最后一个冒号后留空表示不需要将结果输出。
A3单元格通过使用A2中的输出变量来引用存储过程的执行结果,计算结果与A2是相同的,都是从TEST表中查询的结果,数据类型是序表。