光标
为了出来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数据库中,游标(Cursor)是处理数据集的一个关键机制,主要用于执行查询并逐行处理结果集。游标可以被视为一个临时存储区,用于保存SELECT语句的结果集,允许程序对这些结果进行迭代...
所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去... 所谓执行计划,顾名思义,就是...
光标自动定位功能结合这些特性,使得PLSQL Developer成为Oracle数据库开发人员不可或缺的工具之一。通过熟练掌握和利用这些功能,开发者不仅可以编写出高质量的PL/SQL代码,还能在日常工作中节省大量时间,将更多的...
通过将光标置于该行并按下F9,你可以设置一个断点,使得程序在执行到这一行时暂停。 2. **运行和调试**: - 当设置了断点后,你可以通过点击工具栏上的Debug按钮或者使用快捷键F9来启动调试会话。此时,PL/SQL ...
3. **游标管理**:OCI支持游标(或称光标),允许用户一次处理查询结果集的一行数据。`OCISessionBegin()`和`OCISessionEnd()`用于开启和关闭游标,`OCIFetch()`用于获取下一行数据。 4. **事务控制**:通过`...
rlwrap是一个实用工具,可以提供命令行历史记录和增强的光标移动功能。在rlwrap中调用sqlplus,可以方便地使用历史命令,提高数据库操作效率。 总结,这个教程全面覆盖了在Linux CentOS系统中部署和维护Oracle 10g...
**问题**: 如何使用Oracle中的光标来更新数据? **解答**: 使用光标可以在循环中逐行处理数据,特别适用于需要根据查询结果执行复杂逻辑的情况。 - **示例**: 假设有一个光标`CURSOR c1 IS SELECT * FROM table_name...
本文将深入探讨"Oracle讲义"中涉及的关键知识点,包括Oracle的体系结构、文件管理、光标、触发器以及异常处理。 1. Oracle体系结构:Oracle数据库的体系结构主要包括实例和数据库两部分。实例是Oracle运行时内存...
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控制...
9. **光标**:在PL/SQL中,光标是一种机制,用于逐行处理查询结果。它们在循环结构中使用,允许程序逐行访问和处理数据。 10. **例外**:异常处理是处理运行时错误的关键部分。Oracle提供了BEGIN...EXCEPTION END...
本文将深入探讨如何使用C#语言在WinForm应用中建立与Oracle及SQL Server数据库的连接,以及如何在DataGridView控件上实现数据的增删改查和光标导航操作。 首先,连接Oracle数据库需要引入Oracle的数据提供者——...
Oracle PL/SQL是Oracle数据库系统中的编程语言,用于构建复杂的业务逻辑和数据库应用程序。在Oracle Forms和Reports开发中,我们经常遇到各种问题,以下是一些常见的问题及其解决方法: 1. 键盘触发子:Developer/...
另外,还有一种**隐式光标**,它是由Oracle自动处理的,不需要显式地打开和关闭。所有在PL/SQL块中的SQL语句都会有一个隐式光标,它自动处理查询结果。例如: ```sql for rec in (select * from some_table where ...
在将光标移至自定义的描述弹性域内时,屏幕上会出现一个弹出式窗口。与关键弹性域相似的是,弹出式窗口可以根据企业的需要显示任意多个字段。 描述弹性域的主要特点包括: * 提供可自定义的扩展“空间” * 可以...
本软件是一款 Oracle 客户端工具 - 专用于 Oracle 数据库操作: 多线程、多连接、智能/彩色SQL编辑器、中英文双语界面并能切换、支持 PL/SQL、批量SQL运行、高效的块操作、方便的表格操作,不需要安装 Oracle ...
- **说明部分**:定义变量、常量、光标等。 - **执行部分**:包含SQL语句和其他PL/SQL语句。 - **异常处理部分**:处理程序执行过程中可能出现的异常情况。 以上内容总结了东华大学Oracle课件中的关键知识点,...
本工具是用 Java 开发的、专门用于 Oracle 数据库操作的一种图形界面工具: 多线程、多连接、支持 PL/SQL、功能实用、操作简便,能运行于所有平台包括 Windows、Linux 及 Unix,勿需安装 Oracle 客户端,仅 2.8 MB ...
7. **自动选择语句**:在SQL窗口中,启用AutoSelect statement(在Preferences -> Window Types -> SQL Window中设置),使得光标所在位置的完整语句会被高亮,便于操作。 8. **自动替换**:通过Tools -> ...
- **用代码控制ITEM的焦点转移**:通过编写代码控制光标的移动,提升用户体验。 #### 三、Oracle Report 基础 **3.1 Report 页面设置** 这部分介绍了如何在 Oracle Reports 中进行页面布局和格式设置,包括添加页眉...
Snap Id和Snap Time是快照的唯一标识,Sessions是当前数据库连接的数量,Cursors/Session是当前每个会话的光标数量。Begin Snap和End Snap是快照的开始和结束时间,Elapsed是快照之间的时间间隔,DB Time是数据库...