`

Oracle 存储过程中的循环语句写法

阅读更多
首先科普一下:
oracle 游标属性 sql%found sql%notfound sql%rowcount
当执行一条DML语句后,DML语句的结果保存在四个游标属性中,这些属性用于控制程序流程或者了解程序的状态。当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关闭。隐式游标只使用 SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三个属性.SQL%FOUND,SQL%NOTFOUND是布尔值,SQL%ROWCOUNT是整数值。

  SQL%FOUND和SQL%NOTFOUND

  在执行任何DML语句前 SQL%FOUND和SQL%NOTFOUND的值都是NULL,在执行DML语句后,SQL%FOUND的属性值将是:

  . TRUE :INSERT

  . TRUEELETE和UPDATE,至少有一行被DELETE或UPDATE.

  . TRUE :SELECT INTO至少返回一行

  当SQL%FOUND为TRUE时,SQL%NOTFOUND为FALSE。

  SQL%ROWCOUNT

  在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL,对于SELECT INTO语句,如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功,SQL%ROWCOUNT的值为0,同时产生一个异常 NO_DATA_FOUND.

  SQL%ISOPEN

  SQL%ISOPEN是一个布尔值,如果游标打开,则为 TRUE, 如果游标关闭,则为FALSE.对于隐式游标而言SQL%ISOPEN总是FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即关闭。

==============
言归正传,一般我们编写存储过程用到游标循环的话,可以这么写:
declare
cursor cur is 
        select * from iss2_foc_response;
raw_row iss2_foc_response%rowtype;
begin
      for raw_row in cur
      loop
          dbms_output.put_line('test');
      end loop;
end;

for语句直接帮我们做了游标的打开关闭,以及判断工作。

我们也可以换一种写法:

declare
cursor cur is 
        select * from iss2_foc_response;
raw_row iss2_foc_response%rowtype;
begin
      open cur;
      FETCH cur 
       into raw_row;
      while cur%found
      loop
            dbms_output.put_line('test while');
            FETCH cur 
             into raw_row;
      end loop;
      close cur;
end;

根据游标的特点,这两种循环的写法是等效的。

补充一点,游标默认打开是只读游标,如果要在用到游标的时候修改游标中的值,需要在游标定义的时候,加上For update语句。
分享到:
评论

相关推荐

    oracle存储过程写法

    根据提供的Oracle存储过程示例,我们可以详细解析其中的关键知识点,包括存储过程的创建、游标的使用、临时表的创建及数据处理等。 ### 存储过程的创建与使用 存储过程是在数据库中编写的SQL代码块,它可以接受...

    关于oracle存储过程的基本语法

    Oracle存储过程是一种在Oracle数据库中存储的一段可执行的SQL代码或PL/SQL代码,它可以帮助开发人员实现复杂的业务逻辑处理,提高应用程序的性能,并简化数据库管理。 #### 二、Oracle存储过程的基本结构 存储过程...

    oracle存储过程详解-开发技术

    - 解释:在Oracle存储过程中,使用`SELECT`语句获取单个字段时,必须紧跟`INTO`关键字。 3. **使用 SELECT INTO 时需确保数据存在** - 在使用`SELECT INTO`时,必须确保查询结果至少有一条记录,否则会抛出“no ...

    oracle 存储过程和函数例子

    在Oracle数据库中,存储过程和函数是PL/SQL(Procedural Language/Structured Query Language)编程的重要组成部分。它们允许开发者创建可重用的代码段,提高数据库操作的效率和安全性。下面将通过给出的一些示例来...

    Oracle 10g 数据库管理 应用开发 标准教程 思考与练习.pdf

    * 在 Oracle 数据库实现中,需要考虑数据库的存储结构、进程管理、SQL 语句优化等方面的知识点。 五、数据库查询和索引 * 在 Oracle 数据库中,查询可以通过使用索引、优化 SQL 语句、调整 SGA 的大小等方法实现。...

    Oracle考试题.docx

    PL/SQL是一种过程化的SQL扩展语言,它可以嵌入到SQL语句中,实现更复杂的功能,如循环、条件判断等控制结构。 ### 12. 存储过程的调用 #### 12.1 存储过程调用语法 - **知识点解释**:题目中提供了一个存储过程的...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    她是Oracle ACE,也是OakTable(Oracle社区中著名的“Oracle科学家”的非正式组织)的成员,经常在技术会议上演讲。她的著作还包括 Expert Oracle Practices和Beginning Oracle SQL,博客主页是karenmorton....

    Oracle_Database_11g_SQL_优化.pdf

    11. SQL代码的最佳实践:了解编写高效SQL代码的一些基本原则和最佳实践,比如减少不必要的计算、避免在循环中使用复杂的SQL语句、减少数据类型转换等。 12. 使用外部工具辅助优化:利用第三方的性能分析工具和应用...

    Oracle 开发DBA SQL编写规范

    - 所有SQL语句中的关键字、函数名以及保留词均应使用小写字母书写。 - 表名、字段名建议使用大写字母书写,以便于区分关键字。 - 示例: ```sql select col1, col2 from tab1 where col3 = 'value'; ``` ##### ...

    oracle考试题复习答.docx

    - **定义**:在实例的运行过程中,Oracle 维护一组虚拟的表,它们记录当前数据库活动的相关信息,这些表称为动态性能表。 - **作用**:动态性能视图提供了数据库实例内部工作状态的实时视图,有助于监控和诊断问题。...

    关于Oracle的SQL性能调整.pdf

    本文将重点讨论SQL语句的写法和优化器对不同SQL执行过程的影响。 首先,SQL性能调整的目标明确且实用,主要是避免不必要的大表全表扫描,减少IO操作以提升数据库服务器的整体性能。对于大表,通常通过建立合适的...

    Oracle的PL_SQL优化三部曲.pdf

    在Oracle数据库中,PL/SQL是一种强大的过程式编程语言,用于处理和管理数据库。然而,不恰当的PL/SQL代码可能会导致性能问题,影响系统的整体效率。本文通过一个经典案例,揭示了如何通过优化PL/SQL代码来提高性能,...

    收获不知Oracle

    2.2.3.2 体系结构中提交的探讨34 2.2.3.3 劳模的评选 38 2.2.3.4 回滚的研究 40 2.2.3.5 一致的查询 43 2.2.3.6 一致读的原理46 2.2.3.7 实践的体会 49 2.3 体系学习让SQL性能提升千倍 65 2.3.1 一起探索体系学习的...

    资深DBA对Oracle编写规范的总结

    在数据库开发过程中,遵循一套标准化的编码规范不仅能够提升代码的可读性和可维护性,还能有效降低后期优化的成本。对于个人开发者或是整个开发团队而言,一套统一且规范化的编码规则能够极大地促进代码质量的提升,...

    SQL游标原理和使用方法

    3. 获取数据:通过FETCH语句,你可以从游标中提取一行数据,并将其存储到变量中。 4. 移动游标:根据需求,可以使用不同的移动命令,如NEXT、PREVIOUS、FIRST、LAST等,改变当前行的位置。 5. 更新和删除数据:...

    《Java基础入门》复习资料(打印).doc.docx

    10. **循环语句**:Java中的循环语句包括for、while和do-while,if和switch不属于循环语句。 11. **数组访问**:访问数组的第一个元素通常使用`arr[0]`。 12. **二维数组**:创建一个3x2的二维数组,正确写法是`...

    mybatis中批量插入的两种方式(高效插入)

    MyBatis是一个强大的持久层框架,它允许开发者编写SQL查询,使用存储过程,并进行高级映射,无需手动处理JDBC代码和结果集的封装。在处理大量数据时,批量插入是一种提高性能的有效策略。本文将深入探讨MyBatis中...

    1Z0-808J V10.02.pdf

    2. 控制流语句:这包括条件语句(if-else)和循环控制语句(for、while、do-while),以及它们在实际代码中的应用。考生应该能够分析代码片段,并预测程序的行为或输出结果。 3. 数组和集合:数组和集合框架是Java...

    IBM华为Java面试题

    - **流程控制**:如if-else、switch、for、while、do-while循环和break、continue语句。 3. **类和对象** - **构造器**:用于初始化新创建的对象。 - **访问修饰符**:public、private、protected和默认修饰符的...

Global site tag (gtag.js) - Google Analytics