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

时间:2024-11-11 19:41:06
--创建一个包,定义一个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 ;
import ;
import ;
import ;
import ;


public class FenYeTest {


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

//给输出的?赋值
(4, );
(5, );
(6, );
//执行
();
//取出总记录数
int my_sumrecord=(4);//getInt(4)中的4是由参数决定的
//取出总页数
int my_sumpage=(5);
ResultSet rs=(ResultSet) (6);

("总记录数"+my_sumrecord);
("总页数:"+my_sumpage);
while(()){
("编号:"+(1));
}
} catch (Exception e) {

();
}

}
}

用java测试时会报异常:

: ORA-00923: 未找到要求的 FROM 关键字
ORA-06512: 在 "", line 24
ORA-06512: 在 line 1


at .(:439)
at .(:395)
at .(:802)
at .(:436)
at .(:186)
at .(:521)
at .T4CCallableStatement.doOall8(:202)
at .(:1005)
at (:1307)
at (:3449)
at (:3550)
at (:4710)
at (:1374)
at (:28)



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

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

   异常处理了!!!