【存储过程】在java语言中调用存储函数

本文介绍了在Oracle数据库中创建并使用存储过程函数的方法。包括两个示例:一是计算员工年度总收入的函数;二是创建一个返回记录集的游标函数。通过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));  
        }  
    }  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值