zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    CSS浮动(float、clear)通俗讲解
    JAVA 类的加载
    数据库操作 delete和truncate的区别
    正则表达式 匹配相同数字
    Oracle EBS OM 取消订单
    Oracle EBS OM 取消订单行
    Oracle EBS OM 已存在的OM订单增加物料
    Oracle EBS OM 创建订单
    Oracle EBS INV 创建物料搬运单头
    Oracle EBS INV 创建物料搬运单
  • 原文地址:https://www.cnblogs.com/zl520/p/11161940.html
Copyright © 2011-2022 走看看