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

原文地址:https://www.cnblogs.com/zl520/p/11161940.html

时间: 2024-12-09 13:48:56

oracle中带参存储过程的使用的相关文章

oracle中函数和存储过程的区别和联系【转载竹沥半夏】

oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和存储过程的区别. 一.存储过程 1.定义 存储过程是存储在数据库中提供所有用户程序调用的子程序,定义存储过程的关键字为procedure. 2.创建存储过程 create [or replace] procedure 存储过程名 [(参数1 类型,参数2 out 类型……)] as

oracle中函数和存储过程的区别和联系

oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和存储过程的区别. 一.存储过程 1.定义 存储过程是存储在数据库中提供所有用户程序调用的子程序,定义存储过程的关键字为procedure. 2.创建存储过程 create [or replace] procedure 存储过程名 [(参数1 类型,参数2 out 类型……)] as 变量名 类型:

Java 中带参带返回值方法的使用

如果方法既包含参数,又带有返回值,称为带参带返回值的方法. 例: 实现功能:将考试成绩排序并输出,返回成绩的个数 实现思路: 1. 定义一个包含整型数组参数的方法,用来传入成绩数组 2. 在方法体中使用 Arrays.sort( ) 方法对成绩数组进行排序,然后使用 Arrays.toString( ) 方法将数组转换为字符串并输出,最后使用 return 返回数组中元素的个数. 3. 调用方法时需要先创建对象,然后再调用.调用时为其传入成绩数组,并获取方法的返回值,保存在变量中,最后输出成绩的

慕课网-Java入门第一季-7-5 Java 中带参无返回值方法的使用

1 public class HelloWorld { 2 public static void main(String[] args) { 3 4 // 创建对象,对象名为hello 5 HelloWorld hello = new HelloWorld(); 6 7 // 调用方法,传入两门课程的成绩 8 hello.calcAvg(94, 81); 9 } 10 11 /* 12 * 功能:计算两门课程考试成绩的平均分并输出平均分 13 * 定义一个包含两个参数的方法,用来传入两门课程的成

Java 中带参无返回值方法的使用

现实生活中电饭锅可以实现“煮饭”的功能,但前提是我们必须提供食材.如果我们什么都不提供,那就真是的“巧妇难为无米之炊”了. Java带参就是解决这类问题的方法. 例如:为了解决计算两门科目平均分的计算问题,就可以定义一个带参的方法,通过调用方法,传入两门课程的成绩 一定不可忽视的问题: 1. 调用带参方法时,必须保证实参的数量.类型.顺序与形参一一对应 2. 调用方法时,实参不需要指定数据类型 3. 方法的参数可以是基本数据类型,如 int.double 等,也可以是引用数据类型,如 Strin

oracle 中触发器增加存储过程commit问题

触发器无需commit也不能写commit触发器和触发它的DML是同一个事务DML提交了,触发器的操作也提交了,要不就一起回滚了 当然,如果你一定要在触发器里写COMMIT那就用自治事务相当于一个事务里的子事务 正常情况下,Oracle规定在触发器中不能运行 ddl语句和commit,rollback语句. 解决办法有两种: 1.在可以在触发器中加入:pragma autonomous_transaction; 表示自由事务处理.如: create or replace trigger UPDA

SQL SERVER链接服务器执行带参存储过程

SQL SERVER通过链接服务器,链接到ORACLE数据库,下面我要在SQL SERVER数据库上写一个存储过程,该存储过程需要用通过链接服务去取ORACLE数据库里的数据,该存储过程是含参数的存储过程.在SQL SERVER 数据库里创建一个存储过程来取ORACLE数据库里的一个表里的数据如下: 1,在SQL SERVER数据库上创建存储过程 USE [ProdDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- =======

oracle中如何调用存储过程

一.通过pls块来调用存储过程: declare p_dzno varchar2(50); p_vchtype  VARCHAR2(50); p_productclass  VARCHAR2(50); p_dptcode  VARCHAR2(50); begin p_vchtype:='MP'; p_productclass:='03'; p_dptcode:='206'; PRODDATA.product_dz_proc.pd_getdzno(p_dzno,p_vchtype,p_produc

Java基础---Java中带参数无返回值方法的使用(三十九)

Java 中带参无返回值方法的使用 有时方法的执行需要依赖于某些条件,换句话说,要想通过方法完成特定的功能,需要为其提供额外的信息才行.例如,现实生活中电饭锅可以实现"煮饭"的功能,但前提是我们必须提供食材,如果我们什么都不提供,那就真是的"巧妇难为无米之炊"了.我们可以通过在方法中加入参数列表接收外部传入的数据信息,参数可以是任意的基本类型数据或引用类型数据. 我们先来看一个带参数,但没有返回值的方法: 上面的代码定义了一个 show 方法,带有一个参数 name