您的位置:首页 > 数据库

集算器调用数据库存储过程的代码示例

2014-09-09 14:24 435 查看
集算器可以方便的调用数据库的存储过程,这里通过例子来看一下具体的程序写法。 调用无返回值的存储过程

用oracle的存储过程为例,存储过程只有一个输入参数,没有输出参数:create orreplace procedure pro1(pid IN VARCHAR)asbegin insert into emp values(pid,'mike'); update emp set name='rose' where id=pid; commit;end;在集算器中可以使用execute函数或者proc函数来调用这个存储过程:

A1:连接数据库。
A2:调用存储过程,输入参数值为4。


Proc函数主要用来调用有返回值和结果集的存储过程,也可以用来调用无返回参数的存储过程pro1。
A1:连接数据库。
A2:调用存储过程pro1,逗号后边的是参数的描述,4:0:"i":中定义了一个输入参数,4是输入参数的值,0表示输入参数的类型是由集算器自动识别,”i”表示输入类型。如果需要手工指定参数类型可以写为:4:1:"i":,中间的1代表整形int。集算器支持的参数类型详见附录:参数类型定义。

二、调用单返回值的存储过程
下面的存储过程要返回一个参数值,所以不能使用execute函数,需要使用proc函数。
create or replace procedure testb
(para1 in varchar2,para2 out varchar2)
as
begin
select name into para2 from emp where id= para1;
end testb;
集算器调用这个存储过程的代码是:


A1:连接数据库。A2:使用proc函数调用存储过程testb。这里使用了两个参数:1:0:”i”:表示值为1,类型为自动判断的输入参数;:11:”o”:name中的11代表字符串类型(详见附录:参数类型定义),”o”代表输出类型,name是为这个输出参数定义了一个集算器变量,接收返回值。A3:将A2中存储过程输出的值从name变量赋值给A3单元格。 三、调用返回单结果集的存储过程
存储过程RQ_TEST_CUR返回单个结果集:CREATE ORREPLACE PROCEDURE RQ_TEST_CUR( V_TEMP OUT TYPE.RQ_REF_CURSOR, PID IN VARCHAR)ASBEGIN OPEN V_TEMP FOR SELECT * FROM TESTWHERE ID =PID;END RQ_TEST_CUR;存储过程输入一个参数,返回了一个结果集。在集算器中调用这个存储过程的代码如下:

A2单元格使用proc函数调用存储过程:proc("{callRQ_TEST_CUR(?,?)}",:101:"o":table1,1:0:"i":)。下面依次解释一下proc行数的输入参数: 1) sql字符串
"{call RQ_TEST_CUR(?,?)}"中包含调用存储过程的名字,问号表示sql的参数。 2) 输出参数
:101:"o":table1中定义了一个输出参数,101代表其数据类型是游标,”o”代表这个参数是输出参数。Table1是定义了一个变量,可以用这个变量引用返回结果。输入参数 1:0:"i":中定义了一个输入参数,1是输入参数的值,0表示输入参数的类型是由集算器自动识别。A3单元格通过使用A2中的输出变量来引用存储过程的执行结果,计算结果与A2相同,都是包含id和name两个字段的序表。 四、调用返回多结果集的存储过程
先编写一个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;存储过程返回了emp和test两个表的结果集。在集算器中调用这个存储过程,接受两个结果集的程序如下:

A2单元格使用proc函数调用存储过程:orac.proc("{callproAA(?,?)}",:101:"o":a,:101:"o":b),返回了两个结果集(序表),组成了一个序表的集合:序列,赋值给了A2。下面依次解释一下proc函数的输入参数:
1) sql字符串
"{call proAA(?,?)}"中包含调用存储过程的名字,问号表示sql的参数。 2) 输出参数1
:101:"o":a中定义了一个输出参数,101代表其数据类型是游标,”o”代表这个参数是输出参数。a是定义了一个变量,可以用这个变量引用返回结果。 3) 输出参数2
:101:"o":b中定义了一个输出参数,101代表其数据类型是游标,”o”代表这个参数是输出参数。b是定义了一个变量,可以用这个变量引用返回结果。 A3单元格返回了A2单元格的第一个序表(emp表的结果集)。
A4、A5单元格分别使用A2中的输出变量a、b来获取存储过程对应的执行结果,a对应emp表的数据,赋值给A4,b对应test表的数据,赋值给A5。

附录:参数类型定义
type的取值为: public final static byte DT_DEFAULT =(byte) 0; //默认,自动识别 public final static byte DT_INT =(byte) 1; public final static byte DT_LONG =(byte) 2; public final static byte DT_SHORT =(byte) 3; public final static byte DT_BIGINT =(byte) 4; public final static byte DT_FLOAT =(byte) 5; public final static byte DT_DOUBLE =(byte) 6; public final static byte DT_DECIMAL =(byte) 7; public final static byte DT_DATE = (byte)8; public final static byte DT_TIME =(byte) 9; public final static byte DT_DATETIME =(byte) 10; public final static byte DT_STRING =(byte) 11; public final static byte DT_BOOLEAN =(byte) 12; public final static byte DT_INT_ARR =(byte) 51; public final static byte DT_LONG_ARR =(byte) 52; public final static byte DT_SHORT_ARR =(byte) 53; public final static byte DT_BIGINT_ARR= (byte) 54; public final static byte DT_FLOAT_ARR =(byte) 55; public final static byte DT_DOUBLE_ARR= (byte) 56; public final static byte DT_DECIMAL_ARR= (byte) 57; public final static byte DT_DATE_ARR =(byte) 58; public final static byte DT_TIME_ARR =(byte) 59; public final static byteDT_DATETIME_ARR = (byte) 60; public final static byte DT_STRING_ARR= (byte) 61; public final static byte DT_BYTE_ARR =(byte) 62; public final static byte DT_CURSOR =(byte) 101; public final static byteDT_AUTOINCREMENT = (byte) 102;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息