plsql 返回结果集的存储过程

 --返回结果集的存储过程 
--1.创建一个包,在该包中定义了一个游标类型test_corsor
create or replace package testpackage as 
type test_cursor is ref cursor;
end testpackage;

--2.创建存储过程
create or replace procedure lt_pro1
(ltNo in number, t_cursor out testpackage.test_cursor) is
begin
      open t_cursor for select * from emp where deptno=ltNo;

end;


--3.如何在java中调用


// 1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.得到连接
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
// 3.创建CallableStatement
CallableStatement cs = ct.prepareCall("{call lt_pro1(?,?)}");
// 4.给?赋值
cs.setInt(1, 10);
// 第二个参数传oracle自带的类型游标
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
// 5.执行
cs.execute();
// 得到结果集
ResultSet rs = (ResultSet) cs.getObject(2);
while(rs.next()){
System.out.println(rs.getInt(1)+" " +rs.getString(2));
}
// 关闭
cs.close();
ct.close();



oracle分页


select * from (select t1.*, rownum rn from (select * from emp) t1 where rownum<=10) where rn>=6; 
 
--1.创建一个包,在该包中定义了一个游标类型test_corsor
create or replace package testpackage as 
type test_cursor is ref cursor;
end testpackage;


-- 存储过程返回分页记录
create or replace procedure fenye
(tableName in varchar2, --表名
myPageSize in number, --每页几条记录
pageNo in number, -- 当前页
allcount out number, -- 总记录数
pagecount out number, -- 总页数
t_cursor out testpackage.test_cursor --返回的记录集
) is
-- 定义部分
v_sql varchar2(1000);
-- 定义两个整数
v_begin number:=(pageNo-1)*myPageSize+1;
v_end number:=pageNo*myPageSize;
begin
-- 执行部分
v_sql:='select * from (select t1.*, rownum rn from (select * from '||tableName||') t1 
where rownum<='||v_end||') where rn>='||v_begin;
-- 把游标和sql关联
open t_cursor for v_sql;
-- 计算总页数和总记录数
v_sql:='select count(*) from '||tableName;
-- 执行sql语句,并把结果付给allcount
execute immediate v_sql into allcount;
-- 计算总页数
if mod(allcount,myPageSize)=0 then
pageCount:=allcount/myPageSize;
else
pageCount:=allcount/myPageSize+1;
end if;
-- 关闭游标 
--close t_cursor;
end;



// 1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2.得到连接
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
// 3.创建CallableStatement
CallableStatement cs = ct.prepareCall("{call fenye(?,?,?,?,?,?)}");
// 4.给?赋值
cs.setString(1, "emp");
cs.setInt(2, 5);
cs.setInt(3, 1);
// 第二个参数传oracle自带的类型游标
cs.registerOutParameter(4, java.sql.Types.INTEGER);
cs.registerOutParameter(5, java.sql.Types.INTEGER);
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
// 5.执行
cs.execute();
// 得到结果集
int count=cs.getInt(4);
int pageCount= cs.getInt(5);
System.out.println(count);
System.out.println(pageCount);
ResultSet rs = (ResultSet) cs.getObject(6);
while(rs.next()){
System.out.println(rs.getInt(1)+" " +rs.getString(2));
}
// 关闭
cs.close();
ct.close();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PL/SQL是Oracle数据库中的一种编程语言,用于编写存储过程、函数、触发器等数据库对象。下面是PL/SQL查询存储过程的介绍: PL/SQL查询存储过程是一种在数据库中定义的可重复使用的代码块,用于执行查询操作。它可以接受输入参数,并返回结果。查询存储过程通常用于封装复杂的查询逻辑,提高代码的可维护性和重用性。 在PL/SQL中,可以使用以下步骤来创建和执行查询存储过程: 1. 创建存储过程:使用CREATE PROCEDURE语句创建存储过程,并指定输入参数和返回结果的类型。例如: CREATE PROCEDURE get_employee_details (p_employee_id IN NUMBER, p_result OUT SYS_REFCURSOR) IS BEGIN OPEN p_result FOR SELECT * FROM employees WHERE employee_id = p_employee_id; END; 上述示例创建了一个名为get_employee_details的存储过程,接受一个输入参数p_employee_id和一个输出参数p_result,通过查询语句返回符合条件的员工信息。 2. 执行存储过程:使用EXECUTE或CALL语句执行存储过程,并传递参数。例如: DECLARE v_employee_id NUMBER := 100; v_result SYS_REFCURSOR; BEGIN get_employee_details(v_employee_id, v_result); -- 处理结果 END; 上述示例中,声明了一个变量v_employee_id并赋值为100,声明了一个变量v_result用于接收存储过程的结果。然后调用get_employee_details存储过程,并传递参数。 3. 处理结果:在存储过程执行后,可以通过游标(CURSOR)来处理返回的结果。例如: LOOP FETCH v_result INTO v_employee; EXIT WHEN v_result%NOTFOUND; -- 处理每一条记录 END LOOP; 上述示例中,使用FETCH语句从结果中获取每一条记录,并在循环中进行处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值