`

存储过程的调用和执行

阅读更多

存储过程
1 什么是存储过程?
 用于在数据库中完成特定的操作或者任务。是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用。

2 存储过程的参数模式


存储过程的参数特性:
 IN类型的参数 OUT类型的参数 IN-OUT类型的参数
值被 传递给子程序 返回给调用环境 传递给子程序
返回给调用环境
参数形式 常量 未初始化的变量 初始化的变量
使用时 默认类型 必须明确指定 必须明确指定


3 无参数存储过程的使用:

CREATE  OR  REPLACE  PROCEDURE  过程名  [(parameter,...)]
IS
定义变量
Begin
Plsql程序
End;
 

例:创建一个存储过程,用于向数据库中插入一条记录。
第一步:创建

CREATE  OR  REPLACE  PROCEDURE  pro_1
IS
Begin
  insert into person values (11,'aa','aav');
End;
 

 

第二步:在sql*plus中执行该过程

exec pro_1;
 

 

第三步:通过JDBC使用存储过程。

private Connection conn = null;
private ResultSet rs = null;
private CallableStatement state = null;
//调用一个无参数的存储过程
public void testPro()
  {
       conn = Tools.getConnection();
       try {
       state = conn.prepareCall("{call pro_1}");
       state.execute();
  } catch (Exception e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
  }
}
 

 


4 带有IN类型参数的存储过程的使用。
例:创建一个存储过程,用于向数据库中插入一条记录。
第一步:创建

CREATE  OR  REPLACE  PROCEDURE  pro_2(id number,name varchar2,email varchar2)
IS
Begin
  insert into person values (id,name,email);
End;
 


第二步:在sql*plus中执行该过程

exec pro_2(12,'aaa','aaa');
 

 

第三步:通过JDBC使用存储过程。

//使用一个带有 IN 类型参数的存储过程
public void testPro_in(int id,String name,String email)
 {
    conn = Tools.getConnection();
    try {
     state = conn.prepareCall("{call pro_2(?,?,?)}");
     state.setLong(1, id);
     state.setString(2, name);
     state.setString(3, email);
     state.execute();
  } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
  }
}
 

 

5 带有out类型参数的存储过程的使用。
例:创建一个存储过程,用于返回数据库中的Person表的总行数。

第一步:创建

CREATE  OR  REPLACE  PROCEDURE  pro_3(num out number)
IS
mynum number;
Begin
  select count(*) into mynum from person;
  num := mynum;
End;
或者
CREATE  OR  REPLACE  PROCEDURE  pro_3(num out number)
IS
Begin
  select count(*) into num from person;
End;
 

 

第二步:在sql*plus中执行该过程

declare
a number;
begin
  pro_3(a);
  dbms_output.put_line(a);
end;
 

 

第三步:通过JDBC使用存储过程。

public void testPro_out()
{
  conn = Tools.getConnection();
  try {
   state = conn.prepareCall("{call pro_3(?)}");
   state.registerOutParameter(1, Types.NUMERIC);
   state.execute();
   int num = state.getInt(1);
   System.out.println(num);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
}
 

 

6 带有in-out类型参数的存储过程的使用。
创建:

CREATE  OR  REPLACE  PROCEDURE  pro_4(num in out number)
IS
a number := 100;
Begin
  num := a*num;
End;

在sql*plus中执行该过程

declare
  a number := 12;
begin
  pro_4(a);
  dbms_output.put_line(a);
end;
 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics