博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle存储过程一(返回单条记录的值)
阅读量:5357 次
发布时间:2019-06-15

本文共 1884 字,大约阅读时间需要 6 分钟。

  最近在使用java验证excel表单元格的信息,数据量非常大,而且验证的规则比较复杂,如果单纯使用程序的验证的话,效率将非常低,考虑到oracle存储过程是可编译的,每次编译之后都会将数据放入高速缓存当中,下次再取,速度将非常的快。之前并没有接触到oracle的存储过程,所以也花了几天的时间去研究了一番,由于时间紧迫,没有怎么很好的整理。现在先将比较基本的一些实现方法给大家分享一下

  下面是使用java调用存储过程来返回out的值,因为存储过程有三种参数,in表输入,out表输出,in out即可输入又可输出,什么意思呢?刚接触的人可能就不大明白了,其实in就像java方法中的参数一样,可将参数传到存储过程(其实就将存储过程看成方法就行了,只是比较特殊,他是可编译的),而out相当于java方法的返回参数,只是存储过程可以定义多个out,相当于可以return多个参数一样,do you understand?

  需要注意的是,out可以返回单条记录或者多条记录,他们的实现方法是不一样的,返回单条记录直接将他作为某个变量赋值就行,下面随便写了一个例子说明一下:

存储过程代码:

 
CREATE
OR
REPLACE
PROCEDURE
pro_return_result
(
a
in
varchar2
,b out
varchar2
)
AS
BEGIN
if
a
is
not
null
then
b :
=
'
不好说
'
;
end
if
;
END
pro_return_result;

java调用代码:(只贴出核心部分,其他的数据库连接自己搞定)

ContractedBlock.gif
ExpandedBlockStart.gif
代码
 
CallableStatement cs
=
null
;
cs
=
con.prepareCall(
"
{call pro_return_result(?,?)}
"
);
cs.setString(
1
,
"
1
"
);
cs.registerOutParameter(
2
, Types.VARCHAR);
cs.execute();
String result
=
cs.getString(
2
);
System.out.println(result);
看到上面的例子了吧,因为存储过程第二个参数是out输入,并且是返回单条记录的,所以使用这样的一个方法对输出out进行注册
cs.registerOutParameter(2, Types.VARCHAR); 输出结果:不好说 如果要输出多个记录,则在存储过程写多几个out,然后写多几个cs.registerOutParameter(参数位置, Types.VARCHAR);OK搞定返回单条记录 如果存储过程要为默写变量赋值,返回单条记录时,可使用这样的一种方式:select 某表的字段1,字段2…… into 变量1,变量2 from 表 where 表字段=某个值 如例子:
ContractedBlock.gif
ExpandedBlockStart.gif
代码
 
CREATE
OR
REPLACE
PROCEDURE
validate_module_name
(
a
in
varchar2
,b out
varchar2
)
AS
c
varchar2
(
255
);
BEGIN
select
module_one
into
c
from
temp_test_case
where
num
=
a;
if
c
is
not
null
then
b :
=
'
1
'
;
end
if
;
END
validate_module_name;
调用的方式和上面说的一样,as下是放自定义的变量,begin到End是PL/SQL语句,
PL/SQL中的空值使用is null来表示,非空为:is not null,这和java程序有所区别,PL/SQL有时间再详解
注:存储过程还有一种返回情况,返回的是多条记录,既结果集,而不是单条记录,则不能使用上面的那种方法,得使用游标输出结果集,同时
select 某表的字段1,字段2……
into 变量1,变量2 from 表 where 表字段=某个值
这种方式也不能使用,因为select into语句只使用返回单条记录的情况。在java调用存储过程也不能使用
cs.registerOutParameter(参数位置, Types.VARCHAR)了,存储过程返回结果集的java调用下回详解……

转载于:https://www.cnblogs.com/azai/archive/2010/08/19/1802930.html

你可能感兴趣的文章
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
linux的子进程调用exec( )系列函数
查看>>
MySQLdb & pymsql
查看>>
zju 2744 回文字符 hdu 1544
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
前端笔记-bom
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>