游标: 指向结果集的指针,他提供一种机制,可以对结果集进行逐行处理
类型: 隐式游标 显式游标
查看隐式游标:output(sql%rowcount);
显式游标:oracle提供的一套语法,让你创建游标、使用游标
用法:
declare
--1.定义游标(即定义指向的结果集)
cursor emp_cursor is select ename, sal from emp where deptno = 10;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open emp_cursor;--2.打开游标
loop
fetch emp_cursor into v_ename, v_sal;--3.提取数据
exit when emp_cursor%notfound;
--在这里面做事情
dbms_output.put_line(v_ename || ': ' || v_sal);
end loop;
close emp_cursor;
end;
/
游标属性:
1.%isopen 确定游标是否打开 if cl%isopen then...
2.%found 是否提取到数据
loop
fetch cl into var1,var2;
if cl%found then ...
end loop;
3.%notfound 与found相反 exit when c1%notfound
4.%rowcount 返回当前位置已经提取到的实际行数
loop
fetch c1 into my_ename, my_deptno;
if c1%rowcount > 10 then ...
end loop;
---------------------------------------------------------------------------------------------------------------------
批量提取游标的结果集:
declare
cursor emp_cursor is select ename from emp where deptno = 10;
type ename_table_type is table of emp.ename%type;
ename_table ename_table_type;
begin
open emp_cursor;
--批量提取
fetch emp_cursor bulk collect into ename_table;
for i in 1..ename_table.count loop
dbms_output.put_line(ename_table(i));
end loop;
close emp_cursor;
end;
/
提取一部分:fetch emp_cursor bulk collect into ename_table limit 5;
机遇游标定义记录变量:
cursor emp_cursor is select ename,sal from emp where deptno = 10;
emp_record emp_cursor%rowtype;
--------------------------------------------------------------------------------------------
参数游标: 用于select确定,参数不确定的情况,定义参数数据类型的时候不能指定长度
cursor emp_cursor(no number) is select ename from emp where deptno=no;
打开:open emp_cursor(10);
------------------------------------------------------------------------------------
使用游标更新、删除数据:
for update:加行几所
for update of:对于多表联查的情况加of限定要锁的表
current of: 在执行更新和删除的时候使用它表明执行的当前行
cursor emp_cursor i select ename,sal from emp for update of emp;
nowait: 不等待: cursor emp_cursor i select ename,sal from emp for update nowait;
declare
cursor emp_cursor i select ename,sal from emp for update;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open emp_cursor;
loop
fetch emp_cursor into v_ename, v_sal;
exit when emp_cursor%notfound;
if v_sal < 2000 then
update emp set sal = sal + 100 where current of emp_cursor;
end loop;
close emp_cursor;
end;
/
-------------------------------------------------------------------------------------------------
游标for循环:不需要打开游标、提取数据、关闭游标
declare
cursor emp_cursor is select ename,sal from emp;
begin
for e in emp_cursor loop
dbms_output.put_line('第'||emp_cursor%rowcount ||'个雇员:'||e.ename);
end loop;
end;
/
for循环直接打开子查询:
begin
for e in (select ename, sal from emp) loop
dbms_output.put_line(e.ename);
end loop;
end;
/
-----------------------------------------------------------------------------------------
游标变量:
declare
type emp_cursor_type is ref cursor;--定义游标变量类型
emp_cursor emp_cursor_type;--定义游标变量
emp_record emp%rowtype;
begin
open emp_cursor for select * from emp where deptno = 10;--打开游标
loop
fetch emp_cursor into emp_record;
exit when emp_cursor%notfound;
dbms_output.put_line('第'||emp_cursor%rowcount || '个雇员:' || emp_record.ename);
end loop;
close emp_cursor;--关闭游标
end;
/
return子句:定义返回类型
declare
type emp_record_type is record(
name varchar2(10),salary number(6,2)
);
type emp_cursor_type is ref cursor return emp_record_type;
emp_cursor emp_cursor_type;
emp_record emp_record_type;
begin
open emp_cursor for select ename,sal from emp where deptno = 10;--打开游标
loop
fetch emp_cursor into emp_record;
exit when emp_cursor%notfound;
dbms_output.put_line('第'||emp_cursor%rowcount || '个雇员:' || emp_record.name);
end loop;
close emp_cursor;--关闭游标
end;
/
cursor:用于返回嵌套游标
declare
type emp_cursor_type is ref cursor;
cursor dept_cursor(no number) is select a.dname, cursor(select ename,sal from emp
where deptno = a.deptno) from dept a where a.deptno = no;
empcur emp_cursor_type;
v_dname dept.dname%type;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open dept_cursor(&no);
loop
fetch dept_cursor into v_dname, empcur;
exit when dept_cursor%notfound;
dbms_output.put_line('部门名:'||v_dname);
loop
fetch empcur into v_ename,v_sal;
exit when empcur%notfound;
dbms_output.put_line('雇员名:'||v_ename ||',工资:' ||v_sal);
end loop;
end loop;
close dept_cursor;
end;
/
发表评论
-
oracle索引小结
2011-02-24 17:11 649一, oracle的索引 ... -
Oracle数据导入导出imp/exp命令使用
2011-02-23 10:50 790Oracle数据导入导出imp/exp就相当于oracle数据 ... -
PL/SQL复习十四 动态SQL
2011-02-17 01:12 709使用execute immediate处理DDL操作: ... -
PL/SQL复习十三 触发器
2011-02-17 01:12 752注意:1、触发器的大小不能超过32K,如果确实需要建立触 ... -
PL/SQL复习十二 包
2011-02-17 01:11 659--建立包规范 create or replace p ... -
PL/SQL复习十一 管理子程序
2011-02-17 01:11 738查询用户对象: SQL> select * fr ... -
PL/SQL复习十 函数
2011-02-17 01:10 805不带任何参数的函数 ... -
PL/SQL复习九 存储过程
2011-02-17 01:10 837无参数的存储过程: create or replace ... -
PL/SQL复习八 异常
2011-02-17 01:09 797异常分类: 1. 预定义异常: 处理常见的oracle ... -
PL/SQL复习六 批量绑定
2011-02-17 01:08 825一、效率比较 1.不适用批量: declare ... -
PL/SQL复习五 集合方法
2011-02-17 01:07 8241.exists:判断某集合元素是否存在 declar ... -
PL/SQL复习四 复合数据类型
2011-02-17 01:05 707一、PL/SQL记录 1.简单使用: declare ... -
PL/SQL复习三 程序控制语句
2011-02-17 01:01 682一、条件分支语句: --1. if..else ... -
PL/SQL复习二 定义变量
2011-02-17 00:55 905oracle中的变量: 1、标量类型:单个数据、单行单 ... -
PL/SQL复习一 标识符命名规则
2011-02-17 00:53 1567变量 :v_作为前缀 例如:v_sal, v_job ...
相关推荐
9. **游标表达式(Cursor Expressions)**:在PL/SQL 12c及更高版本中引入,允许在SELECT语句中直接使用游标,简化了代码。 10. **包(Packages)**:包是组织PL/SQL代码的一种方式,包含一组相关的常量、类型、...
本文将深入探讨PL/SQL程序设计中的一些关键知识点,包括基本语法、记录类型、流程控制、游标使用、异常处理、存储函数与存储过程以及触发器。 1. PL/SQL基本语法: PL/SQL程序由声明、执行和异常处理三部分组成。...
在PL/SQL中,你可以编写存储过程、函数、触发器、游标等,这些都是数据库级别的程序单元,可以直接在数据库中执行。例如,存储过程是一组预编译的PL/SQL语句,可以接受参数并返回结果,常用于执行复杂的业务逻辑。...
1. Oracle007(16-20).doc 和 Oracle007(9-15).doc:这些文档可能包含了PL/SQL的分步骤教程,从第9讲到第20讲,涵盖了PL/SQL的基本概念、语法、变量声明、控制结构(如IF-ELSE,WHILE,FOR循环)以及游标(CURSOR)的...
1. **选项A**:PL/SQL支持游标操作和事务命令,这是正确的。 2. **选项B**:声明部分在PL/SQL块中不是必须的,因此此说法错误。 3. **选项C**:可执行部分在PL/SQL块中是必须的,这是正确的。 4. **选项D**:异常...
23. **PL/SQL游标**:关于PL/SQL中的游标,这里的信息不完整,但通常游标用于遍历查询结果集。 以上内容详尽地阐述了Oracle数据库的一些基础知识点,包括数据库组件、SQL语句、数据类型、权限管理以及PL/SQL编程中...
Oracle开发不仅涉及到SQL语言的使用,还包括PL/SQL编程、数据库设计、性能优化等多个方面。1000.jpg可能是一张包含关键概念或流程图的图片,用于辅助理解复杂的Oracle架构或操作步骤。新建 Microsoft PowerPoint ...
7. **第七章 PL/SQL子程序设计**:包括函数和过程的定义、调用,以及参数传递。这部分内容有助于开发更复杂、模块化的数据库应用。 8. **第八章 事务和备份恢复管理**:讲解了Oracle中的事务概念,事务的ACID属性,...
本复习资料主要涵盖了Oracle中的数据操作语言(DML)和过程化SQL(PL/SQL)的相关实例,这对于理解和掌握Oracle数据库的操作至关重要。 1. 数据操作语言(DML): DML是Oracle中用于插入、更新、删除和查询数据的...
oracle PL/sql语言复习资料,很全的oracle函数,sql语句,以及游标,存储过程,触发器等复习资料.
这篇文档"良心出品oracle数据库期末复习.doc"涵盖了Oracle数据库的基础知识,包括数据文件、日志文件、控制文件等数据库组件,以及数据库操作、表空间管理、用户权限、SQL语句和PL/SQL编程等内容。 一、Oracle...
此外,理解和运用事务控制、游标、异常处理等核心概念也是PL/SQL学习的重点。在准备这部分考试时,考生需要熟悉SQL语句的基本语法,包括DML(Data Manipulation Language)用于插入、删除和修改数据,以及DDL(Data ...
PGA(Program Global Area)则是每个服务器进程或后台进程私有的内存空间,用于存储PL/SQL变量、游标等。 5. **Oracle数据库逻辑结构**:包括表空间、段、区和块。表空间是数据库逻辑结构的基本单位,段是由一个或...
1. PL/SQL基础:包括符号、变量声明、引用、转换函数、PL/SQL中的SELECT、DML、提交(Commit)和回滚(Rollback)操作,以及控制流语句(IF、LOOP/FOR、游标Cursor)。 2. PL/SQL程序设计:如触发器、过程和函数。 ...
面试可能会涉及到编写和解释PL/SQL代码,处理异常,以及如何使用游标。 5. **性能优化**:Oracle面试通常会涵盖如何诊断和解决性能问题,如使用EXPLAIN PLAN分析查询执行路径,调整SQL语句,或通过索引优化提高查询...
23. **命名的PL/SQL块**:游标不是命名的PL/SQL块,程序包、过程和函数是。 24. **调试信息显示**:`DBMS_OUTPUT`包用于在PL/SQL块和存储过程中显示调试信息。 这些知识点涵盖了Oracle数据库的管理、SQL语法、安全...
5. **PL/SQL编程**:理解PL/SQL的语法结构,包括变量声明、流程控制语句(IF、CASE、LOOP等)、异常处理等。重点掌握存储过程、函数的定义与调用,以及包的使用,了解如何封装逻辑和复用代码。 6. **触发器定义**:...
12. **游标与异常处理**:掌握PL/SQL中的游标概念,用于逐行处理数据,以及如何处理运行时错误和异常。 通过这个基础教程,读者将能够全面了解Oracle 9i数据库的基本操作,为进一步学习更高级的Oracle特性,如RAC...