Oracle存储过程的调用和执行

时间:2024-02-18 16:45:25

1、什么是存储过程:

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

2、无参存储过程的使用:

1.  CREATE  OR  REPLACE  PROCEDURE  过程名  [(parameter,...)]  

2.  IS  

3.  定义变量  

4.  Begin  

5.  Plsql程序  

6.  End;  

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

2.  第一步:创建  

3.  CREATE  OR  REPLACE  PROCEDURE  pro_1  

4.  IS  

5.  Begin  

6.    insert into person values (11,\'aa\',\'aav\');  

7.  End;  

8.    

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

10.exec pro_1;  

11.  

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

13.    private Connection conn = null;  

14.    private ResultSet rs = null;  

15.    private CallableStatement state = null;  

16.    //调用一个无参数的存储过程  

17.    public void testPro()  

18.    {  

19.        conn = Tools.getConnection();  

20.        try {  

21.            state = conn.prepareCall("{call pro_1}");  

22.            state.execute();  

23.        } catch (Exception e) {  

24.            // TODO Auto-generated catch block  

25.            e.printStackTrace();  

26.        }  

27.    }  

3、带有IN类型参数的存储过程的使用

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

2.  第一步:创建  

3.  CREATE  OR  REPLACE  PROCEDURE  pro_2(id number,name varchar2,email varchar2)  

4.  IS  

5.  Begin  

6.    insert into person values (id,name,email);  

7.  End;  

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

9.  exec pro_2(12,\'aaa\',\'aaa\');  

10.  

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

12.    //使用一个带有 IN 类型参数的存储过程  

13.    public void testPro_in(int id,String name,String email)  

14.    {  

15.        conn = Tools.getConnection();  

16.        try {  

17.            state = conn.prepareCall("{call pro_2(?,?,?)}");  

18.            state.setLong(1, id);  

19.            state.setString(2, name);  

20.            state.setString(3, email);  

21.            state.execute();  

22.        } catch (Exception e) {  

23.            // TODO Auto-generated catch block  

24.            e.printStackTrace();  

25.        }  

26.    }  

4、带有OUT类型参数的存储过程的使用

1.  例:创建一个存储过程,用于返回数据库中的Person表的总行数。  

2.    

3.  第一步:创建  

4.  CREATE  OR  REPLACE  PROCEDURE  pro_3(num out number)  

5.  IS  

6.  mynum number;  

7.  Begin  

8.    select count(*) into mynum from person;  

9.    num := mynum;  

10.End;  

11.或者  

12.CREATE  OR  REPLACE  PROCEDURE  pro_3(num out number)  

13.IS  

14.Begin  

15.  select count(*) into num from person;  

16.End;  

17.  

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

19.declare   

20.a number;  

21.begin  

22.  pro_3(a);  

23.  dbms_output.put_line(a);  

24.end;  

25.  

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

27.public void testPro_out()  

28.    {  

29.        conn = Tools.getConnection();  

30.        try {  

31.            state = conn.prepareCall("{call pro_3(?)}");  

32.            state.registerOutParameter(1, Types.NUMERIC);  

33.            state.execute();  

34.            int num = state.getInt(1);  

35.            System.out.println(num);  

36.        } catch (Exception e) {  

37.            // TODO Auto-generated catch block  

38.            e.printStackTrace();  

39.        }  

40.    }   

 

5、带有IN-OUT类型参数的存储过程的使用

1.  创建:  

2.  CREATE  OR  REPLACE  PROCEDURE  pro_4(num in out number)  

3.  IS  

4.  a number := 100;  

5.  Begin  

6.    num := a*num;  

7.  End;  

8.    

9.  sql*plus中执行该过程  

10.declare  

11.  a number := 12;  

12.begin  

13.  pro_4(a);  

14.  dbms_output.put_line(a);  

15.end;