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

集算器可以方便的调用数据库的存储过程,这里通过例子来看一下具体的程序写法。

  • 调用无返回值的存储过程

用oracle的存储过程为例,存储过程只有一个输入参数,没有输出参数:

create orreplace procedure pro1

(pid IN VARCHAR)

as

begin

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

)

AS

BEGIN

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;

时间: 2024-10-19 08:30:07

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

集算器管理数据库事务的代码示例

集算器可以向数据库写入数据,支持数据库事务管理.这里通过例子来看一下控制事务提交和回滚等等的编程方法. 1.自动提交事务 集算器可以方便的实现增删改,最简单的写法如下: 上图中的A2到A4分别实现了插入.修改和删除.每条sql执行之后自动提交.需要说明的是: 1.3条语句提交了3次,对数据库操作比较频繁. 2.三条sql没有事务关系,后续的sql如果执行失败,并不影响前面的sql. 下面介绍结合序表批量提交事务,以及多条sql组成一个事务的编程例子.     2.批量提交事务 从students

集算器访问HTTP数据的代码示例

使用集算器(esProc)可以很方便的从http数据源读取数据进行处理. 本例子中有一个servlet,对外提供json格式的雇员信息查询.Servlet访问数据库的员工表,保存了员工的信息,如下: EID   NAME       SURNAME        GENDER  STATE        BIRTHDAY        HIREDATE         DEPT         SALARY 1       Rebecca   Moore      F       Califor

集算器读写EXCEL文件的代码示例

集算器可以方便地读写Excel文件,下面用一个例子进行说明:     描述:从data.xlsx读取订单数据和销售员列表,根据这两个sheet计算各部门的销售额,计算结果写入result.xlsx.     源Excel文件:data.xlsx有两个sheet,其中订单数据如下: 销售员列表如下:     集算器代码: A1-A2:从excel文件data.xlsx分别读取第1和第2个sheet,以序表的形式存储在A1.A2格,即订单数据和销售员列表. A3-A4:先将订单数据和销售员列表按照员

集算器访问数据库的配置

集算器支持包括数据库在内的多种异构数据源.这里,我们通过例子来看一下集算器访问数据库的方法. 集算器可以连接数据库的jdbc驱动,也可以通过jdbc-odbc桥连接数据库.由于版权的原因,使用集算器的程序员需要自行准备数据库的jdbc或者odbc驱动.Jdbc驱动jar包准备好之后,需要放入集算器IDE安装目录的/common/jdbc中,例如:C:\Program Files (x86)\MicroInsight\common\jdbc目录中. 集算器集成开发环境的ODBC配置界面如下: 集算

集算器对数据库的操作

集算器可以从数据库中读取数据,可以将数据写入数据库,也可以调用数据库的存储过程.基于这三种基本操作,集算器可以应用在多种数据库相关的场景任务: 1.  数据分析和展现任务,其过程是: 通过sql或者存储过程,从数据库读入数据. 从其他数据源(其他数据库.文件.hdfs.nosql数据库.http数据源.json数据源等)读入数据. 将异构数据统一进行处理 提供给应用程序或者报表展现. 2.  类似ETL的批处理任务. 过程和分析展现任务类似,所不同的是最后一步数据不是用来展现,而是写入其他数据库

集算器替代存储过程实现报表数据源

存储过程是SQL语句和流程控制语句的集合,常用来把一个复杂的计算目标分解为多个简单的计算步骤.虽然以复杂性换来了灵活性,但SQL语句固有的缺点仍然体现在存储过程中,比如:分步不彻底.数据无序.缺乏集合.缺乏引用,之前我们也分析过存储过程作为报表数据源的利弊,可点击这里查看. 集算器解决了存储过程的上述缺陷,降低了对开发人员的技术要求,是存储过程理想的替代工具. 报表例子说明 某电信产品厂商有一张报表,主要目的是分析优势产品的销售额.销量.环比等指标,其中优势产品的定义是"在每个州的销量均在前10

用集算器实现报表的外置存储过程数据源效果

业务逻辑相对复杂的报表开发中,开发人员往往会使用存储过程为报表准备数据.而使用存储过程往往受到编写困难.执行效率低下.数据库操作权限限制等问题,着实让开发人员不爽.如何改进或替代存储过程,成了很多程序员的心心声. 本文通过一个例子说明如何使用集算器实现报表存储过程数据源效果. 报表样式 某网络平台需要监测查看一定周期内的用户状况,需要为运营部门出具日报.周报.月报.年报等报表,每类报表中均包含本期与上期.上上期数据比较,故涉及数据量较大.这里以其日报为例(月报年报只是统计周期不同),报表格式如下

集算器JDBC的集成与使用方法

集算器JDBC 类似一个不完整的数据库JDBC驱动,它不带物理表,可将集算器视为只有存储过程的数据库(较强的计算能力,较弱的存储机制).与使用数据库JDBC非常类似,可以像调用存储过程一样调用集算器程序.不同的是,集算器JDBC是个完全嵌入式计算引擎,所有运算都在这个嵌入包中完成,而不象数据库那样还有一个独立的服务器来实施计算. 1.加载驱动jar 集算器JDBC所需jar包括:dm.jar.poi-3.7-20101029.jar.log4j_128.jar.icu4j_3_4_5.jar.d

用集算器实现跨数据库关联报表

实际应用中很多报表的数据来源于多个不同类型的数据库,报表数据源跨数据库是报表开发中的常态.目前实现这类跨库关联报表的方式有多种,但都会存在这样那样的问题. 使用报表工具自身多源关联功能 现在大多数主流报表工具都支持多数据源关联,这在某些方面确实为报表用户带来了便利.然而我们也经常会遇到通过报表自身的多源关联功能很难实现一些跨库关联的报表(由于数据结构和业务本身决定).这当然容易理解,报表工具主要是来做数据展现的,而对数据计算本身来说并不擅长. 即使有的能实现,在报表中做跨库关联计算的效率也较低,