JAVA调用Oracle存储过程

JAVA调用Oracle存储过程
JAVA跟Oracle之间最常用的是JAVA调用Oracle的存储过程,以下简要说明下JAVA如何对Oracle存储过程进行调用。
Ⅰ、不带输出参数情况
    过程名称为pro1,参数个数1个,数据类型为整形数据


import  java.sql. * ;
public   class  ProcedureNoArgs 
  {
public   static   void  main(String args[])  throws  Exception
{
   // 加载Oracle驱动 
   DriverManager.registerDriver( new  oracle.jdbc.driver.OracleDriver());
   // 获得Oracle数据库连接 
   Connection conn = DriverManager.getConnection( " jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd " );

     // 创建存储过程的对象 
     CallableStatement c = conn.divpareCall( " {call pro1(?)} " );
    
     // 给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188 
     c.setInt( 1 , 188 );
    
     // 执行Oracle存储过程 
     c.execute();
    conn.close();



Ⅱ、带输出参数的情况
   过程名称为pro2,参数个数2个,数据类型为整形数据,返回值为整形类型


import java.sql.*;
public class ProcedureWithArgs 
  {
public static void main(String args[]) throws Exception
{
   //加载Oracle驱动
   DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
   //获得Oracle数据库连接
   Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ");

    //创建Oracle存储过程的对象,调用存储过程
    CallableStatement c=conn.divpareCall("{call pro2(?,?)}");
    
    //给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188
    c.setInt(1,188);
    //注册存储过程的第二个参数 
      c.registerOutParameter(2,java.sql.Types.INTEGER);
    //执行Oracle存储过程
    c.execute();
      //得到存储过程的输出参数值并打印出来
      System.out.println (c.getInt(2));  
    conn.close();
}
}




Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

Oracle存储过程可以有无参数存储过程和带参数存储过程。


一、无参程序过程语法


create or replace procedure NoParPro
as  ;
begin
;
exception     //存储过程异常
    ;
end;

二、带参存储过程实例

create or replace procedure queryempname(sfindno emp.empno%type) as
       sName emp.ename%type;
       sjob emp.job%type;
begin
       ....
exception
       ....
end;

三、 带参数存储过程含赋值方式
create or replace procedure runbyparmeters  (isal in emp.sal%type,
                         sname out varchar,sjob in out varchar)
as icount number;
begin
      select count(*) into icount from emp where sal>isal and job=sjob;
      if icount=1 then
        ....
      else
        ....
      end if;
exception
      when too_many_rows then
      DBMS_OUTPUT.PUT_LINE('返回值多于1行');
      when others then
      DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');
end;

四、在Oracle中对存储过程的调用
过程调用方式一

declare
        realsal emp.sal%type;
        realname varchar(40);
        realjob varchar(40);
  begin   //存储过程调用开始
        realsal:=1100;
        realname:='';
        realjob:='CLERK';
        runbyparmeters(realsal,realname,realjob);     --必须按顺序
        DBMS_OUTPUT.PUT_LINE(REALNAME||'   '||REALJOB);
  END;  //过程调用结束

过程调用方式二

declare
      realsal emp.sal%type;
      realname varchar(40);
      realjob varchar(40);
begin    //过程调用开始
      realsal:=1100;
      realname:='';
      realjob:='CLERK';
      runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob);  --指定值对应变量顺序可变
      DBMS_OUTPUT.PUT_LINE(REALNAME||'   '||REALJOB);
END;  //过程调用结束

你可能感兴趣的:(oracle存储过程)