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

  • 相关阅读:
    [ZJOI2012]灾难
    java实现风险度量
    大字段字符类型
    [CQOI2011]放棋子
    java实现还款计算
    java实现还款计算
    java实现字符串比较
    java实现字符串比较
    快速插入一百万行数据储存过程
    [六省联考2017]分手是祝愿
  • 原文地址:https://www.cnblogs.com/zl520/p/11161940.html
Copyright © 2020-2023  润新知