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 找到问题所在了:第七行的分号是中文状态下的。另外用我的这种方法也可实现目的。谢谢你的回答!
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
PL/SQL 游标的使用
 游标的使用 ①游标概念 为了处理SQL 语句,ORACLE 必须分配一片叫上下文( context area )的区域来处理所必需的信息, 其中包括要处理的行的数目,一个指向语句被分析以后的表示形式的指针以及查询的活动集(active set)。 游标是一个指向上下文的句柄( handle)或指针。通过游标,PL/SQL可以控制上下文区和处理语句时上下文区会发生些什么事情 ②显式
PL/SQL游标使用详解
每当在PL/SQL中执行一个SQL语时,Oracle数据库都会为这个语句分一个上下文区域(Context Area)来处理所必需的信息,其中包括语句处理的行数,一个指向语句被分析以后的表示形式的指针以及查询的结果集。游标是指向上下文区域的句柄或指针,PL/SQL通过游标可以控制或处理上下文区域。如果按照游标是否绑定到一个专门的查询语句来划分,可以分为静态游标和动态游标。其中静态游标又分为:隐式游标和显示游标;动态游标分为:强类型和弱类型。 1.隐式游标 每当我们执行一个DML语句(包括INSERT,UP
PL/SQL 语句块初次接触(游标使用,实现loop的continue)
<br />语句块结构<br /> <br />       包含三部分:声明部分、执行部分和异常部分,其中执行部分是必须的,声明和异常部分是可选的。<br /> <br />DECLARE<br />  --声明语句<br />BEGIN<br />  --执行语句<br />EXCEPTION<br />  --异常语句<br />END;<br /> <br />oracle 语句块,没有continue功能,可以用goto 实现:<br />下午写的一个简单的语句块功能:<br />      cr
实验五 PL/SQL程序设计基础
一、实验目的 1)  掌握PL/SQL程序设计基础知识 2)  掌握PL/SQL数据类型、变量和常量的声明 3)  掌握PL/SQL程序的控制结构 4)  掌握PL/SQL程序中游标、异常处理的方法 二、预习内容 1)  PL/SQL语言的特点及功能特性是什么? 与SQL语言紧密集成,所有的SQL语句在PL/SQL中都可以得到支持。 2. 减小网络流量,提高应用程序的运行性能。 3.
PL/SQL中游标和游标变量的使用
游标是什么:游标字面理解就是游动的光标。用数据库语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等等。在Oracle9i之前,使用FETCH语句每次只能提取一行数据;从Oracle9i开始,通过使用FETCH…BULK COLLECT INTO语句,每次可以提取多行数据
Oracle PL/SQL编程详解
Oracle PL/SQL编程详解 - 古立 - 博客园 《我的网络摘抄本》 网摘/转载/备忘/随记 博客园 首页 新随笔 联系 管理 订阅
Oracle之课程实验五(pl/sql)
课程名称:Oracle11g数据库应用简明教程   实验题目:实验三使用报表统计各部门人数 姓名:李日中 学号:2010324264班级:10计本3班 实验日期:2013-6-1  成绩:   一、 实验目的 体验PL/SQL程序块循环语句的多层嵌套 二、 实验环境 Oracle 11g R2 PL/SQL Developer    三、 实验主要内容和主要操作步骤 1、 登
PLSQL游标使用实例
-------------------------------------------------------------------- --游标:指向查询结果集的指针,指向哪一行,提取哪一行的数据 --PLSQL的游标默认指向结果集的第一行 /* 使用游标分为4个步骤 1,声明游标 cursor 游标变量 is 查询语句 2,打开游标 open 游标变量(不能重复打开游标) 3,提
Oracle PL/SQL退出循环
在使用PL/SQL的时候,有时候会有这样的需求,执行动态的SQL,你只需要看循环一次的结果,样例如下: DECLARE   V_POWER_GRID_FLAG NUMBER;    TYPE BUREAU_CODE_T IS TABLE OF VARCHAR2(10);    V_BUREAU_CODE_T BUREAU_CODE_T := BUREAU_CODE_T('0101', '0
PL/SQL游标之显示游标操作实例讲解
显式游标显式游标是程序员定义游标获得更多的控制权的上下文的区域。显式游标应在PL/SQL块的声明部分中定义。这是创建一个SELECT语句返回多行。创建显式游标语法是:CURSOR cursor_name IS select_statement;使用显式游标的工作包括四个步骤:声明游标用于初始化在存储器打开游标分配内存获取游标检索数据关闭游标释放分配的内存操作实例窗口:显示游标使用实例源码:-- C...