oracle oracle中ORA-00923: 未找到要求的 FROM 关键字

来源:互联网 发布:2006年网络歌曲大全 编辑:程序博客网 时间:2024/06/05 11:31
--创建一个包,定义一个my_cursor类型的游标
create or replace package my_package as
type my_cursor is ref cursor;
end my_package;


--创建一个分页过程
create or replace procedure fenye
( my_table in varchar2,--表明
  my_record in number, --当前页的记录数
  my_page in number,--当前的页数
  my_sumrecord out number,--总记录数
  my_sumpage out number,--总页数
  p_cursor out my_package.my_cursor --返回记录集合
       
)is
--定义变量
v_begin number:=(my_page-1)*my_record+1;
v_end number:=my_page*my_record;
--定义一个sql语句
v_sql varchar2(1000);
begin
  --执行sql语句
      v_sql:='select * from (select t.*,rownum rn from(select * from ' ||my_table||')t where rownum<='||v_end||')where rn>='||v_begin;
  --把游标和sql语句链接
  open p_cursor for v_sql;
  --计算my_sumrecord和my_sumpage
  --写一个sql语句
  v_sql:='select count(*) from' || my_table;
  --将得到的返回值,赋值给my_sumrecord
  execute immediate v_sql into my_sumrecord;
  --计算my_sumpage
  if mod(my_sumrecord,my_record)=0 then
    --总记录数/当前页的记录数为0,那么总页数为:
    my_sumpage:=my_sumrecord/my_record;
    else
   my_sumpage:=my_sumrecord/my_record+1;
   end if;
  close p_cursor;

end;


package oraclejdbc;


import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;


public class FenYeTest {


public static void main(String[] args) {
try {
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//建立连接
Connection ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott", "tiger");
CallableStatement cs=ct.prepareCall("{call fenye(?,?,?,?,?,?)}");
//给输入的?赋值
cs.setString(1,"emp");
cs.setInt(2, 2);//第一个2代表fenye(?,?,?,?,?,?)函数里的第2个参数,第2个2代表当前页的记录数
cs.setInt(3, 1);//1代表第1页

//给输出的?赋值
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
//执行
cs.execute();
//取出总记录数
int my_sumrecord=cs.getInt(4);//getInt(4)中的4是由参数决定的
//取出总页数
int my_sumpage=cs.getInt(5);
ResultSet rs=(ResultSet) cs.getObject(6);

System.out.println("总记录数"+my_sumrecord);
System.out.println("总页数:"+my_sumpage);
while(rs.next()){
System.out.println("编号:"+rs.getInt(1));
}
} catch (Exception e) {

e.printStackTrace();
}

}
}

用java测试时会报异常:

java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字
ORA-06512: 在 "SCOTT.FENYE", line 24
ORA-06512: 在 line 1


at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:202)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1005)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3550)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4710)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1374)
at oraclejdbc.FenYeTest.main(FenYeTest.java:28)



  原因是这里错了:v_sql:='select count(*) from' || my_table;

  修改后为: v_sql:=' select count(*) from'||chr(10)||my_table;

   异常处理了!!!

0 0
原创粉丝点击