2 baozhadehulu baozhadehulu 于 2016.05.11 17:02 提问

有关oracle pl/sql编程中游标和循环的问题

题目:
使用循环和游标实现,查询部门编号为10的员工信息,将查询结果按照员工编号从大到小的顺序排列,输出倒数第二行记录。

我的代码:

 declare
  empler emp%rowtype;
  i number:=0;
  n number;
  cursor emp_2 is select * from emp where deptno=10 order by empno desc;
begin
  select count(*) into n from emp where deptno=10;
  open emp_2;
  fetch emp_2 into empler;
  loop
    i:=i+1;
    if i=n-1
    then
      dbms_output.put_line('hh');
    end if;
    fetch emp_2 into empler;
    exit when emp_2%notfound;
  end loop;
end;

错误报告:
ORA-06550: 第 7 行, 第 50 列:
PL/SQL: ORA-00911: 无效字符
ORA-06550: 第 7 行, 第 3 列:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:

请问哪里出错了?用这样的方法行的通吗?不行的话用什么方法?

3个回答

CSDNXIAOD
CSDNXIAOD   2016.05.11 17:12

Oracle的PL/SQL编程和游标
Oracle pl/sql编程 14---游标
ORACLE PL/SQL编程之四 把游标说透
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

devmiao
devmiao   Ds   Rxr 2016.05.11 23:44
huangwenkangz
huangwenkangz   2016.05.12 16:03

fetch游标打开方式不会用可以使用for in的方式,for in 会自动关闭游标,fetch要自己手动关闭游标
而且顺序也有问题,先打开,再loop,再fetch
declare
empler emp%rowtype;
i number:=0;
n number;
cursor emp_2 is select * from emp where deptno=10 order by empno desc;
begin
select count(*) into n from emp where deptno=10;
open emp_2;
loop
fetch emp_2 into empler;
exit when emp_2%notfound;
i:=i+1;
if i=n-1
then
dbms_output.put_line('hh');
end if;
-- fetch emp_2 into empler;

end loop;
close emp_2;
end;

baozhadehulu
baozhadehulu 找到问题所在了:第七行的分号是中文状态下的。另外用我的这种方法也可实现目的。谢谢你的回答!
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!