oracle 存储过程带入参,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();

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

来源: https://www.cnblogs.com/zl520/p/11161940.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值