`
学会做人
  • 浏览: 121191 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
阅读更多

                                                                               光标
为了出来sql语句 , Oracle分配一个上下文区域,用于处理所需的信息,
而光标就是指向上下问的句柄或指针、用于控制上下文区和控制处理语句时,上下文区发生的事情

 

一、显示光标(游标)
 
 1、 在PL/SQL中的定义的光标就是显示光标,需要手动open、fetch、close
步骤
    A、  cursor  光标名称 is select 语句
    B、open 光标名称
    C、fetch 光标名称 into 变量列表
    D、 close 光标

 2、 示例代码

CREATE OR REPLACE PROCEDURE sp_cursor

AS
   CURSOR x IS SELECT ename,sal FROM emp;
   v_name  emp.ename%TYPE;
   v_sal emp.sal%TYPE;
BEGIN

    OPEN x ;
    FETCH x INTO v_name,v_sal;
    WHILE x%FOUND
     LOOP
        dbms_output.put_line(v_name||' '||v_sal);
        FETCH x INTO v_name,v_sal;
    
     END LOOP;
 
END;


3、光标的属性

 %FOUND  当最近一次读取记录成功时,返回true
 %NOTFOUND 与  %FOUND恰好相反
 %isopen 当光标打开时返回true
 %rowcount  返回已从光标的记录数

 

4、参数化光标

 (1)  在声明光标的时候,让光标名称带上参数、在使用的时候才将具体的值即(实参)赋给查询语句当做查询条件
  

(2)示例代码
 CREATE OR REPLACE PROCEDURE sp_cursor1

AS
  CURSOR c(dno NUMBER) IS
   SELECT * FROM  emp WHERE emp.deptno = dno;
 
  
BEGIN
    FOR  x IN c(10)
    LOOP
     dbms_output.put_line(x.ename||' '||x.sal);
   
    END LOOP;
END;

 


二、隐式光标

 所有的sql语句在上下文区域都能够执行,所以每一个sql都有一个光标指向上下文区域,此光标就是
称为sql光标,sql光标不用手工打开,fetch和关闭。
---根据员工部门编号查询并输出姓名
---特点:可能无数据(返回0行)或者数据太多(返回多行)
CREATE OR REPLACE PROCEDURE pro_excep
AS
v_name emp.ename%TYPE;
BEGIN
  SELECT ename INTO v_name FROM emp
  WHERE emp.deptno=10;
  dbms_output.put_line('ename:'||v_name);
 
  EXCEPTION
     WHEN no_data_found THEN
     dbms_output.put_line('数据没有找到');
     WHEN too_many_rows THEN
     dbms_output.put_line('数据过多');
     WHEN OTHERS  THEN
      dbms_output.put_line('查询失败');
    
END;

 


DML操作和单行SELECT语句会使用隐式游标,它们是:
  * 插入操作:INSERT。
  * 更新操作:UPDATE。
  * 删除操作:DELETE。
  * 单行查询操作:SELECT ... INTO ...

三、光标循环

1、简单循环可以用loop和end loop实现(但是必须说明循环跳转的语句,不然会很容易出现无限循环的语句)

2、while循环、当条件满足时,再执行循环

3、光标for循环
可以控制次数

 

4、select for  update  光标

四、光标变量
1、光标变量是一种引用类型,在使用时给他分配内存空间
 
exec   sql  allcate  :variable


五、动态SELECT语句和动态游标的用法
 定义动态游标类型的语句如下:
 A、TYPE 游标类型名 REF CURSOR;

 B、 声明游标变量的语句如下:

 C、 游标变量名 游标类型名;

 D、 在可执行部分可以如下形式打开一个动态游标:

 E、 OPEN 游标变量名 FOR 查询语句字符串;


   示例代码:

declare
 type cur_type is ref cursor;
 cur cur_type;
 rec scott.emp%rowtype;
 str varchar2(50);
 letter char:= 'A';
begin
   loop    
    str:= 'select ename from emp where ename like ''%'||letter||'%''';
    open cur for str;
    dbms_output.put_line('包含字母'||letter||'的名字:');
    loop
     fetch cur into rec.ename;
     exit when cur%notfound;
     dbms_output.put_line(rec.ename);
  end loop; 
  exit when letter='Z';
  letter:=chr(ascii(letter)+1);
  end loop;
end;

分享到:
评论

相关推荐

    Oracle 游标 Oracle 游标

    ### Oracle游标详解 在Oracle数据库中,游标(Cursor)是处理数据集的一个关键机制,主要用于执行查询并逐行处理结果集。游标可以被视为一个临时存储区,用于保存SELECT语句的结果集,允许程序对这些结果进行迭代...

    Sql 优化光标移动大法 执行计划

    所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去... 所谓执行计划,顾名思义,就是...

    PLSQL Developer 12 光标自动定位

    光标自动定位功能结合这些特性,使得PLSQL Developer成为Oracle数据库开发人员不可或缺的工具之一。通过熟练掌握和利用这些功能,开发者不仅可以编写出高质量的PL/SQL代码,还能在日常工作中节省大量时间,将更多的...

    调试oracle触发器方法

    通过将光标置于该行并按下F9,你可以设置一个断点,使得程序在执行到这一行时暂停。 2. **运行和调试**: - 当设置了断点后,你可以通过点击工具栏上的Debug按钮或者使用快捷键F9来启动调试会话。此时,PL/SQL ...

    oracle最新OCI文件.zip

    3. **游标管理**:OCI支持游标(或称光标),允许用户一次处理查询结果集的一行数据。`OCISessionBegin()`和`OCISessionEnd()`用于开启和关闭游标,`OCIFetch()`用于获取下一行数据。 4. **事务控制**:通过`...

    Linux Oracle10实战教程

    rlwrap是一个实用工具,可以提供命令行历史记录和增强的光标移动功能。在rlwrap中调用sqlplus,可以方便地使用历史命令,提高数据库操作效率。 总结,这个教程全面覆盖了在Linux CentOS系统中部署和维护Oracle 10g...

    oracle常用问题解答

    **问题**: 如何使用Oracle中的光标来更新数据? **解答**: 使用光标可以在循环中逐行处理数据,特别适用于需要根据查询结果执行复杂逻辑的情况。 - **示例**: 假设有一个光标`CURSOR c1 IS SELECT * FROM table_name...

    oracle讲义

    本文将深入探讨"Oracle讲义"中涉及的关键知识点,包括Oracle的体系结构、文件管理、光标、触发器以及异常处理。 1. Oracle体系结构:Oracle数据库的体系结构主要包括实例和数据库两部分。实例是Oracle运行时内存...

    Oracle11g从入门到精通2

    7.4.3 使用光标 第8章 数据库用户管理 8.1 授予权限 8.1.1 直接授权 8.1.2 授权角色 8.1.3 使用OEM的“安全管理”创建 角色 8.1.4 使用ALTERUSER语句修改 用户的默认角色 8.1.5 使用SET ROLE控制...

    Oracle教程,java调用oracle

    9. **光标**:在PL/SQL中,光标是一种机制,用于逐行处理查询结果。它们在循环结构中使用,允许程序逐行访问和处理数据。 10. **例外**:异常处理是处理运行时错误的关键部分。Oracle提供了BEGIN...EXCEPTION END...

    winform终端连接oracle数据库及SQL数据库

    本文将深入探讨如何使用C#语言在WinForm应用中建立与Oracle及SQL Server数据库的连接,以及如何在DataGridView控件上实现数据的增删改查和光标导航操作。 首先,连接Oracle数据库需要引入Oracle的数据提供者——...

    oracle pl/sql Code

    Oracle PL/SQL是Oracle数据库系统中的编程语言,用于构建复杂的业务逻辑和数据库应用程序。在Oracle Forms和Reports开发中,我们经常遇到各种问题,以下是一些常见的问题及其解决方法: 1. 键盘触发子:Developer/...

    游标教程光标的定义与使用

    另外,还有一种**隐式光标**,它是由Oracle自动处理的,不需要显式地打开和关闭。所有在PL/SQL块中的SQL语句都会有一个隐式光标,它自动处理查询结果。例如: ```sql for rec in (select * from some_table where ...

    Oracle弹性域讲解

    在将光标移至自定义的描述弹性域内时,屏幕上会出现一个弹出式窗口。与关键弹性域相似的是,弹出式窗口可以根据企业的需要显示任意多个字段。 描述弹性域的主要特点包括: * 提供可自定义的扩展“空间” * 可以...

    一个oracle客户端(oracle sql handler)

    本软件是一款 Oracle 客户端工具 - 专用于 Oracle 数据库操作: 多线程、多连接、智能/彩色SQL编辑器、中英文双语界面并能切换、支持 PL/SQL、批量SQL运行、高效的块操作、方便的表格操作,不需要安装 Oracle ...

    oracle课件精华 东华大学

    - **说明部分**:定义变量、常量、光标等。 - **执行部分**:包含SQL语句和其他PL/SQL语句。 - **异常处理部分**:处理程序执行过程中可能出现的异常情况。 以上内容总结了东华大学Oracle课件中的关键知识点,...

    Oracle SQL Handler (Oracle客户端工具) V3.1

    本工具是用 Java 开发的、专门用于 Oracle 数据库操作的一种图形界面工具: 多线程、多连接、支持 PL/SQL、功能实用、操作简便,能运行于所有平台包括 Windows、Linux 及 Unix,勿需安装 Oracle 客户端,仅 2.8 MB ...

    ORACLE常用快捷键设置

    7. **自动选择语句**:在SQL窗口中,启用AutoSelect statement(在Preferences -> Window Types -> SQL Window中设置),使得光标所在位置的完整语句会被高亮,便于操作。 8. **自动替换**:通过Tools -> ...

    oracle ebs开发文档

    - **用代码控制ITEM的焦点转移**:通过编写代码控制光标的移动,提升用户体验。 #### 三、Oracle Report 基础 **3.1 Report 页面设置** 这部分介绍了如何在 Oracle Reports 中进行页面布局和格式设置,包括添加页眉...

    OracleAWR报告详细分析.pdf

    Snap Id和Snap Time是快照的唯一标识,Sessions是当前数据库连接的数量,Cursors/Session是当前每个会话的光标数量。Begin Snap和End Snap是快照的开始和结束时间,Elapsed是快照之间的时间间隔,DB Time是数据库...

Global site tag (gtag.js) - Google Analytics