ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

oracle中带参存储过程的使用

2019-07-10 09:53:31  阅读:235  来源: 互联网

标签:存储 中带 调用 user SQL oracle query 过程


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();

 

标签:存储,中带,调用,user,SQL,oracle,query,过程
来源: https://www.cnblogs.com/zl520/p/11161940.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有