标签:des style blog class code java
简要记录存储过程语法与Java程序的调用方式
一 存储过程
首先,我们建立一个简单的表进行存储过程的测试
1)无返回值的存储过程
2)有单个数据值返回的存储过程
其中,以上两种与sql server基本类似,而对于返回数据集时,上述方法则不能满足我们的要求。在Oracle中,一般使用ref cursor来返回数据集。示例代码如下:
3)有返回值的存储过程(列表返回)
首先,建立我们自己的包。并定义包中的一个自定义ref cursor
在定义了ref cursor后,可以书写我们的程序代码
二、程序调用
在本节中,我们使用java语言调用存储过程。其中,关键是使用CallableStatement这个对象,代码如下:
| String oracleDriverName = "oracle.jdbc.driver.OracleDriver";        // 以下使用的Test就是Oracle里的表空间        String oracleUrlToConnect = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";        Connection myConnection = null;        try{            Class.forName(oracleDriverName);        } catch(ClassNotFoundException ex) {            ex.printStackTrace();        }        try{            myConnection = DriverManager.getConnection(oracleUrlToConnect,                    "xxxx", "xxxx");//此处为数据库用户名与密码        } catch(Exception ex) {            ex.printStackTrace();        }        try{                        CallableStatement proc=null;            proc=myConnection.prepareCall("{call xs_proc(?,?)}");            proc.setString(1, "zhangsan");            proc.registerOutParameter(2, Types.NUMERIC);            proc.execute();            String teststring=proc.getString(2);            System.out.println(teststring);        } catch(Exception ex) {            ex.printStackTrace();        } | 
对于列表返回值的存储过程,在上述代码中做简单修改。如下
上述存储过程修改完毕。另外,一个复杂的工程项目中的例子:查询一段数据中间隔不超过十分钟且连续超过100条的数据。即上述代码所调用的getdcsj存储过程
create 
or replace procedure getDcsj(var_flag     in 
varchar2,                                    var_jzbh     in 
varchar2,                                    number_total out number,                                    var_cursor_a out mypackage.my_cursor,                                    var_cursor_b out mypackage.my_cursor) is  total 
number;  cursor 
cur is    select sj, flag      from 
d_dcsj     where 
jzbh = var_jzbh     order 
by sj desc       for 
update;  last_time 
date;begin  for cur1 in cur 
loop    if 
last_time is null or cur1.sj 
>= last_time - 10 / 60 / 24 then      update 
d_dcsj set flag = var_flag where 
current of 
cur;      last_time 
:= cur1.sj;    else      select 
count(*) into total from d_dcsj where flag = 
var_flag;      dbms_output.put_line(total);      if 
total < 100 then        update d_dcsj set flag = null where flag = var_flag;        last_time := null;        update d_dcsj set flag = var_flag 
where current of cur;      else        open var_cursor_a 
for          select *            from d_dcsj           where flag = 
var_flag             and jzbh = 
var_jzbh             and zh = ‘A‘           order by sj desc;        number_total := total;        open var_cursor_b 
for          select *            from d_dcsj           where flag = 
var_flag             and jzbh = 
var_jzbh             and zh = ‘B‘           order by sj desc;        number_total := total;        exit;      end 
if;    end if;  end loop;  select 
count(*) into total from d_dcsj where flag = 
var_flag;  dbms_output.put_line(total);  if total < 100 
then    open var_cursor_a 
for      select 
* from d_dcsj where zh = ‘C‘;    open var_cursor_b 
for      select 
* from d_dcsj where zh = ‘C‘;  else    open var_cursor_a 
for      select 
*        from d_dcsj       where 
flag = var_flag         and jzbh = 
var_jzbh         and zh = ‘A‘       order 
by sj desc;    number_total := total;    open var_cursor_b 
for      select 
*        from d_dcsj       where 
flag = var_flag         and jzbh = 
var_jzbh         and zh = ‘B‘       order 
by sj desc;    number_total := total;  end if;  commit;end;/标签:des style blog class code java
原文地址:http://www.cnblogs.com/wangcq/p/3710408.html