Oracle存儲過程的調用和執行

一、什麼是存儲過程:

用於在數據庫中完成特定的操做或者任務。是一個PLSQL程序塊,能夠永久的保存在數據庫中以供其餘程序調用。sql

二、無參存儲過程的使用:

1.  CREATE  OR  REPLACE  PROCEDURE  過程名  [(parameter,...)]  數據庫

2.  IS  app

3.  定義變量  ide

4.  Begin  spa

5.  Plsql程序  orm

6.  End;  xml

1.  例:建立一個存儲過程,用於向數據庫中插入一條記錄。  ip

2.  第一步:建立  ci

3.  CREATE  OR  REPLACE  PROCEDURE  pro_1  element

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.    }  

三、帶有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.    }  

四、帶有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.    }   

 

五、帶有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; 

相關文章
相關標籤/搜索