我有这样一个代码:
--建一个包
create or replace package testpackage as type test_cursor is ref cursor;
end testpackage;
--分页的存储过程
create or replace procedure fenye(tableName in varchar2, pageSizes in number, --每页显示的记录数
pageNow in number, --第几页(当期页)
myRows out number, --总记录数
mypageCount out number, --总页数
my_cursor out testpackage.test_cursor --返回的记录集
) is
--定义一个字符串
v_sql varchar2(1000);v_begin number := (pageNow - 1) * pageSizes + 1; v_end number := pageNow * pageSizes;
beginv_sql := 'select * from (select t1.*,rownum rn from(select * from ' || tableName || ') t1 where rownum<=' || v_end || ') where rn>=' || v_begin;
--把游标和sql关联起来
open my_cursor for v_sql;v_sql := 'select count(*) from' || tableName; --组织一个sql
execute immediate v_sql into myRows; --把sql返回的值赋给myRows
if mod(myRows, pageSizes) = 0 thenmypageCount := myRows
/ pageSizes; elsemypageCount := (myRows
/ pageSizes) + 1; end if;
close my_cursor; --关闭游标
end;--使用java测试
package com.test;
import java.sql.*;
public class Test3 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myorcl1","SCOTT","543383076");
CallableStatement cs = ct.prepareCall("{call fenye(?,?,?,?,?,?)}");
cs.setInt(2, 3);
cs.setInt(3,1);
cs.setString(1, "emp");
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
//ResultSet rs = (ResultSet)cs.getObject(6);
System.out.println(cs.getInt(4));
System.out.println(cs.getInt(5));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} }
当我用java调试的时候怎么会有异常
问题出在execute immediate v_sql into myRows;这里
请大师请教
--建一个包
create or replace package testpackage as type test_cursor is ref cursor;
end testpackage;
--分页的存储过程
create or replace procedure fenye(tableName in varchar2, pageSizes in number, --每页显示的记录数
pageNow in number, --第几页(当期页)
myRows out number, --总记录数
mypageCount out number, --总页数
my_cursor out testpackage.test_cursor --返回的记录集
) is
--定义一个字符串
v_sql varchar2(1000);v_begin number := (pageNow - 1) * pageSizes + 1; v_end number := pageNow * pageSizes;
beginv_sql := 'select * from (select t1.*,rownum rn from(select * from ' || tableName || ') t1 where rownum<=' || v_end || ') where rn>=' || v_begin;
--把游标和sql关联起来
open my_cursor for v_sql;v_sql := 'select count(*) from' || tableName; --组织一个sql
execute immediate v_sql into myRows; --把sql返回的值赋给myRows
if mod(myRows, pageSizes) = 0 thenmypageCount := myRows
/ pageSizes; elsemypageCount := (myRows
/ pageSizes) + 1; end if;
close my_cursor; --关闭游标
end;--使用java测试
package com.test;
import java.sql.*;
public class Test3 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:myorcl1","SCOTT","543383076");
CallableStatement cs = ct.prepareCall("{call fenye(?,?,?,?,?,?)}");
cs.setInt(2, 3);
cs.setInt(3,1);
cs.setString(1, "emp");
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
//ResultSet rs = (ResultSet)cs.getObject(6);
System.out.println(cs.getInt(4));
System.out.println(cs.getInt(5));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} }
当我用java调试的时候怎么会有异常
问题出在execute immediate v_sql into myRows;这里
请大师请教
解决方案 »
- case 用法老报错误
- 继续请教各位PL/SQL中单步调试ORACLE存储过程的问题!
- 如何创建一个带有blob字段的实体化视图?
- 如何对日志文件做多工,请教!
- 数据库中的字段为double 现在........
- .net 连接oracle 数据库问题
- PLSQLDev启动用户登陆窗口中的database填什么?我忘记安装的oracle数据库名了,怎么样查?
- 这个MS SQL语句如何改成ORACLE SQL 语句?
- 打算学oracle,安装oracle9i的简单问题,oracle9i能在xp professional 下安装吗?
- 用net8 easy配置好?为什么用sql plus还是不能连上???
- 数据库之间数据转移的问题,求教!
- 有关ORACLE的复杂要求,各位大虾帮忙看看!
另外,返回的游标不用关闭的吧?