Exception in thread "main" java.sql.SQLException: ORA-00923: FROM keyword not found where expected

我有这样一个代码:
  --建一个包
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;
begin

v_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 then

mypageCount := myRows
/ pageSizes; else

mypageCount := (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;这里
请大师赐教  异常是
Exception in thread "main" java.sql.SQLException: ORA-00923: FROM keyword not found where expected
ORA-06512: at "SCOTT.SP_FENYE", line 16
ORA-06512: at line 1
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
 at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
 at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
 at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:212)
 at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:951)
 at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1160)
 at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
 at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
 at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4223)
 at com.hanjie.Oraclce_fenye.main(Oraclce_fenye.java:32)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值