Oracle中存储过程带参分为:输入参数(in)和输出参数(out)

例如:

 create or replace procedure out_test(v_user   in emp.user_name%type,
v_salary out emp.salary%type,
v_deptno out emp.emp_deptno%type) as
begin
select salary, emp_deptno
into v_salary, v_deptno
from emp
where user_name = v_user;
exception
when NO_DATA_FOUND then
dbms_output.put_line('No data found');
when TOO_MANY_ROWS then
dbms_output.put_line('Too many rows found');
end out_test;

在命令行中调用该存储过程,利用绑定变量

 SQL> var v_user varchar2(20);
SQL> var v_salary number;
SQL> var v_deptno number;
SQL> exec :v_user := 'Lisi'; PL/SQL procedure successfully completed
v_user
---------
Lisi SQL> exec out_test(:v_user, :v_salary, :v_deptno); PL/SQL procedure successfully completed
v_user
---------
Lisi
v_salary
---------
v_deptno
---------

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

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

  1. Oracle之带参存储过程(存储过程中for循环调用存储过程)

    --带参存储过程create or replace procedure testdate(v in number) is i number; begin i:=v; insert into test_ ...

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

    oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...

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

    oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...

  4. Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?

    Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程?   麦苗答:方法有多种,可以使用DBMS_MET ...

  5. Oracle中如何写存储过程

    >存储过程是什么? 存储过程是一种命名的PL/SQL程序块,输入.输出参数数量[0个或多个],通常没有返回值[也有特殊的情况]. 运行SQL语句时,Oracle是要先编译再执行的:而存储过程是已 ...

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

    public class HelloWorld { public static void main(String[] args) { // 创建对象,对象名为hello HelloWorld hell ...

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

    如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法. 例如:下面的代码,定义了一个 show 方法,带有一个参数 name ,方法执行后返回一个 String 类型的结果 调用带参带返回值的 ...

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

    有时方法的执行需要依赖于某些条件,换句话说,要想通过方法完成特定的功能,需要为其提供额外的信息才行.例如,现实生活中电饭锅可以实现“煮饭”的功能,但前提是我们必须提供食材,如果我们什么都不提供,那就真 ...

  9. C#:Oracle数据库带参PLSQL语句的正确性验证

    在有Oracle数据库C#项目中,有一个这样的需求:在界面上配置了带参数的PLSQL语句,但是要通过程序验证其正确性,那么该如何实现?这就是本文要探讨的内容. 一:通过OracleCommand对象的 ...

随机推荐

  1. Maven:java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

    直接参考前面一篇文章中间介绍的第2种方法即可:Maven:sun.security.validator.ValidatorException: PKIX path building failed: s ...

  2. BZOJ 3876 [Ahoi2014&Jsoi2014]支线剧情

    题解: 带下界的费用流 对于x->y边权为z Addedge(x,t,1,0) Addedge(s,y,1,z) Addedge(x,y,inf,0) 然后对每个点Addedge(i,1,inf ...

  3. git 常见错误

    1.pack exceeds maximum allowed size 解决办法:git config http.postBuffer 52428800

  4. React + umi +antd+antv/g6 实现力图

    官方示例效果:http://antv.alipay.com/zh-cn/g6/2.x/demo/net/2017-link-data.html 改编效果: 实现步骤: 环境:nodejs.yarn/n ...

  5. 面试题(7)之 leetcode-003

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...

  6. day27(027-反射&JDK新特性)

    ###27.01_反射(类的加载概述和加载时机) A:类的加载概述 *加载   就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. *连接  ...

  7. cf1228 D Complete Tripartite(哈希)

    题意: 无向简单图,无自环,无重边,n个点,m条边,请你将这n个点分为3个互相没有交集的集合.并且满足以下条件: 1.同一个集合中的任意两点之间没有边. 2.每个点都要与除了它这个集合以外的所有点相连 ...

  8. python3 sort list

    1. 对元素指定的某一部分进行排序,关键字排序 s = ['release.10.txt','release.1.txt','release.2.txt','release.14.txt','rele ...

  9. Arduino LiquidCrystal库函数中文对照

    我之所以会试试看LCD+Shield,一是因为我本来就有这块板,但一直不会用,第二个原因则是Arduino+Cookbook这本书.O’Reilly的这本手册对你在Arduino实践中的各种问题(几乎 ...

  10. Maven:A cycle was detected in the build path of project 'xxx'. The cycle consists of projects {xx}

    以下这个错误是在Eclipse中导入多个相互依赖的工程时出现的“循环依赖问题”:A cycle was detected in the build path of project 'xxx'. The ...