ホームページ > データベース > mysql チュートリアル > oracle存储过程一(返回单条记录的值)

oracle存储过程一(返回单条记录的值)

WBOY
リリース: 2016-06-07 15:38:08
オリジナル
1065 人が閲覧しました

最近在使用java验证excel表单元的信息,数据量非常大,而且验证的规则比较复杂,如果单纯使用程序的验证的话,效率将非常低,考虑到oracle存储过程是可编译的,每次编译之后都会将数据放入高速缓存当中,下次再取,速度将非常的快。之前并没有接触到oracle的

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

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

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

存储过程代码:

oracle存储过程一(返回单条记录的值)

<p>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;</p>
ログイン後にコピー

oracle存储过程一(返回单条记录的值)

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

oracle存储过程一(返回单条记录的值)

oracle存储过程一(返回单条记录的值)代码

<p>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);</p>
ログイン後にコピー

oracle存储过程一(返回单条记录的值)

看到上面的例子了吧,因为存储过程第二个参数是out输入,并且是返回单条记录的,所以使用这样的一个方法对输出out进行注册
cs.registerOutParameter(2, Types.VARCHAR);
输出结果:不好说
如果要输出多个记录,则在存储过程写多几个out,然后写多几个cs.registerOutParameter(参数位置, Types.VARCHAR);OK搞定返回单条记录

如果存储过程要为默写变量赋值,返回单条记录时,可使用这样的一种方式:select 某表的字段1,字段2…… into 变量1,变量2 from 表 where 表字段=某个值
如例子:<p></p><p><span><img  src="/inc/test.jsp?url=http%3A%2F%2Fcommon.cnblogs.com%2Fimages%2Fcopycode.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fzajin%2Farticle%2Fdetails%2F9335997" alt="oracle存储过程一(返回单条记录的值)" ></span></p><img  src="/inc/test.jsp?url=http%3A%2F%2Fimages.cnblogs.com%2FOutliningIndicators%2FExpandedBlockStart.gif&refer=http%3A%2F%2Fblog.csdn.net%2Fzajin%2Farticle%2Fdetails%2F9335997" alt="oracle存储过程一(返回单条记录的值)" ><span>代码</span><p></p><pre class="brush:php;toolbar:false"><p>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;</p>
ログイン後にコピー

oracle存储过程一(返回单条记录的值)


调用的方式和上面说的一样,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调用下回详解……
ログイン後にコピー
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート