在java语言中调用存储函数

连接oracle数据库
private static Connection conn;
	static{
		//第一步:加载驱动
			try {
				Class.forName("oracle.jdbc.driver.OracleDriver");
				//得到连接对象		conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","scott");
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
实例一:
【
create or replace function sumSal(emp_no number)--function(参数的值  必须有类型)
--返回值类型
return number--必须有返回值
as
--声明变量
emp_sal emp.sal%type;
emp_comm emp.comm%type;
total emp.sal%type;
begin
  select sal,comm into emp_sal,emp_comm from emp where empno=emp_no;
  total:=emp_sal*12+nvl(emp_comm,0);
  return total;--必须返回  返回值类型一定相同
end;
】
public static void functionTest1() throws SQLException{
		//mypackage 存储函数
		CallableStatement cas=conn.prepareCall("{?=call sumSal(?)}");
		//从1开始
		int index = 1;
		cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.NUMBER);
		//为占位符赋值
		cas.setInt(index++,7369);
		boolean flag=cas.execute();
		System.out.println(flag);
		System.out.println(cas.getInt(1));
	}
实例二:
【
通过包结构创建存储函数
create or replace package mypackage is
  type empc1 is ref cursor;
  function queryEmps return empc1;
end mypackage;
包体
create or replace package body mypackage is
function queryEmps return empc1 is
  emp_c1 empc1;
  begin
    open emp_c1 for select * from emp;
    return emp_c1;
  end;  
end mypackage;
】
	public static void functionTest2() throws SQLException{
		//mypackage 存储函数
		CallableStatement cas=conn.prepareCall("{?=call mypackage.queryEmps}");
		//从1开始
		int index = 1;
		cas.registerOutParameter(index++, oracle.jdbc.OracleTypes.CURSOR);
		
		boolean flag=cas.execute();
		System.out.println(flag);
		
		//调用里边的getCursor方法 返回的是ResultSet结果集
		ResultSet rs = ((OracleCallableStatement)cas).getCursor(1);
		
		while(rs.next()){
			System.out.println(rs.getInt(1));
		}
	}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值