您好,欢迎访问一九零五行业门户网

Oracle查询所有序列 JAVA+Oracle Function全攻略

oracle查询所有序列 java+oracle function全攻略
--查看当前用户的所有序列
select sequence_owner,sequence_name from dba_sequences where sequence_owner='用户名'; 
注意事项:
    1.      必须以管理员身份登录;
    2.      sequence_owner必须为大写,不管你的用户名是否大写。只有大写才能识别。
以一张book表的查询为例:
create table book
(
  booknumber char(3) not null,
  bookname  varchar2(50),
  bookprice  number(18,2)
)
要返回数据集,就需要使用oracle里的reference cursor类型,不过oracle里这个类型用的方式比较罗唆(搞不明白oracle为什么要弄的这么复杂),首先要声明一个引用的cursor类型,这个通过创建一个包来实现:
create or replace package pkg_test
as
    type refcursor is ref cursor;
end pkg_test;
然后创建我们的function存储过程:
create or replace function query_book(key varchar) return pkg_test.refcursor is
  result pkg_test.refcursor;
begin
  open result for
      select * from book where key=book.booknumber;
return(result);
end query_book;
在这个存储过程中,我们传入了查询键值key,返回了一个数据集对象
这样我们就有了一个名为query_book的存储过程,它可以返回一个结果数据集。要调用这个存储过程,可以通过callablestatement接口来调用,,这样需要写成类似'{?=call query_book(?)}'的查询语句,并且参数和返回值都必须用代码设置;在这里,一些简单的存储过程,也可以通过查询来调用。下面就是我使用的调用方法:
public class functest {
  public static void main(string[] args) throws exception {
    class.forname(oracle.jdbc.driver.oracledriver);
    connection  connection = drivermanager.getconnection(jdbc:oracle:thin:@127.0.0.1:1521:leedb,
        test, test);
    statement  stmt = connection.createstatement();
    resultset  dataset = stmt.executequery(select query_book('001') from dual);
    if (dataset.next()) {
      resultset  ret = (resultset)dataset.getobject(1);
while( ret.next() ) {
        system.out.print(ret.getstring(1));
        system.out.print(\t);
        system.out.print(ret.getstring(2));
        system.out.print(\t);
        system.out.println(ret.getdouble(3));
      }
    }
  }
}
注意这里返回的数据集中内嵌了function返回的数据集,需要进行特殊处理。
其它类似信息

推荐信息