oracle中帶參存儲過程的使用


Oracle中存儲過程帶參分為:輸入參數(in)和輸出參數(out)

例如:

 1 create or replace procedure out_test(v_user   in emp.user_name%type,
 2                                      v_salary out emp.salary%type,
 3                                      v_deptno out emp.emp_deptno%type) as
 4 begin
 5   select salary, emp_deptno
 6     into v_salary, v_deptno
 7     from emp
 8    where user_name = v_user;
 9 exception
10   when NO_DATA_FOUND then
11     dbms_output.put_line('No data found');
12   when TOO_MANY_ROWS then
13     dbms_output.put_line('Too many rows found');
14 end out_test;

在命令行中調用該存儲過程,利用綁定變量

 1 SQL> var v_user varchar2(20);
 2 SQL> var v_salary number;
 3 SQL> var v_deptno number;
 4 SQL> exec :v_user := 'Lisi';
 5  
 6 PL/SQL procedure successfully completed
 7 v_user
 8 ---------
 9 Lisi
10  
11 SQL> exec out_test(:v_user, :v_salary, :v_deptno);
12  
13 PL/SQL procedure successfully completed
14 v_user
15 ---------
16 Lisi
17 v_salary
18 ---------
19 v_deptno
20 ---------

在plsql developer中執行帶的存儲過程,無參可以直接執行,帶in類型的參數要輸入變量值,帶out類型的不用輸入,會在plsql下面輸出結果

 

 

在hibernate的 EJB()調用存儲過程 中執行存儲過程

 

 

EJB調用存儲過程
     要調用存儲過程,我們可以通過EntityManager 對象的createNativeQuery()方法執行SQL 語句(注意:這里說的是SQL 語句,不是EJB3 QL), 調用存儲過程的SQL 格式如下:
     {call 存儲過程名稱(參數1, 參數2, … )}
     在EJB3 中你可以調用的存儲過程有兩種
     1.無返回值的存儲過程。
     2.返回值為ResultSet(以select 形式返回的值)的存儲過程,EJB3 不能調用以OUT 參數返回值的存儲過程

1.調用無返回值的存儲過程
   //調用無返回參數的存儲過程
   Query query = em.createNativeQuery("{call Procedure()}");
   query.executeUpdate();

2.調用返回單值的存儲過程
   //調用返回單個值的存儲過程
   Query query = em.createNativeQuery("{call GetPersonName(?)}");
   query.setParameter(1, new Integer(1));
   String result = query.getSingleResult().toString();

3.調用返回表全部列的存儲過程
   在調用存儲過程時,可以讓EJB3 Persistence 運行環境將列值直接填充入一個Entity 的實例(本例填充進Person 對象),並將實例作為結果返回
   //調用返回Person 全部列的存儲過程
   Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
   List result = query.getResultList();
存儲過程GetPersonList:
   CREATE PROCEDURE `GetPersonList`()
   NOT DETERMINISTIC
           SQL SECURITY DEFINER
           COMMENT ''
    BEGIN
              select * from person;
    END;

4.調用返回部分列的存儲過程
   創建存儲過程:
   CREATE PROCEDURE `GetPersonPartProperties`()
                  NOT DETERMINISTICSQL SECURITY DEFINER
                  COMMENT ''
   BEGIN
                  SELECT personid, personname from person;
   END;
   //調用返回部分列的存儲過程
   Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
   List result = query.getResultList();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM