ORACLE中游标和复合数据类型
更新时间:2024-04-11 17:12:01 阅读量: 综合文库 文档下载
- oracle游标删除数据推荐度:
- 相关推荐
游标和复合数据类型
一.游标简介
A.要处理 SQL 语句,PL/SQL 打开一个称作环境区域的工作区 B.PL/SQL 使用该区域执行 SQL 语句和存储处理信息
C.称作“游标”的 PL/SQL 结构允许您命名环境区域,访问其信息及在某些情况下控制其处理过程 D.查询返回多行时,可以将游标显式地定义为
—在查询所返回的首行之外的处理
—对当前正在处理的行进行跟踪
E.由多行查询返回的行集称作活动集
二.游标类型:有两类游标
A.隐式游标
? 由 Oracle 自动定义并打开,用于处理每个 SQL语句
? 最近打开的环境区域被称为“SQL%”游标
B.显式游标
? 如果查询返回多行,则可定义显式游标来对当前正在处理的行进行跟踪
三.游标功能
A.游标名是一个未声明的标识符,仅用于引用查询 B.不能对游标赋值,也不能在表达式中使用游标名 C.显式游标可以有参数
D.游标参数可以出现在查询中常量出现的任何位置上 E.可以将游标参数初始化为默认值
F.可以将实参的不同值传递到游标,按需要采用或替换默认值 G.游标参数的范围对于游标来讲是局部变量
H.当游标为 OPENED 时,游标参数的值可以用于相关的查询
四.定义游标:可以通过在 PL/SQL 程序块的声明部分命名游标或将它与某个查询关联来定义一个游标: CURSOR <游标名> IS
CURSOR emp_cur IS
SELECT empno, ename, job, sal FROM emp;
五.操纵游标
A.可以使用下列语句操纵游标:⑴.OPEN, ⑵.FETCH,⑶.CLOSE
B.在使用 OPEN、CLOSE 或 FETCH 语句引用这些语句之前必须对游标进行声明
1.OPEN 语句
A.初始化或打开游标
B.在查询返回任何行之前必须打开游标
C.打开游标将执行查询并识别活动集合 :OPEN <游标名> OPEN emp_cur;
2.FETCH 语句
A.一次只能在一个活动集合中检索行 B. 可以重复执行,直到检索到了所有行
FETCH <游标名> INTO var1, …, varN; OR
FETCH <游标名> INTO record_variable;
FETCH emp_cur INTO mrec;
3.CLOSE 语句
A.关闭游标并让活动集合成为未定义内容 :CLOSE <游标名>;
CLOSE emp_cur;
B.只要游标关闭,可以通过使用 OPEN 语句重新打开它
六.显式游标的属性:每个游标有四个属性可以用于访问游标的环境区域
– %NOTFOUND
A.如果因为没有多行而使最后的 FETCH 失败,则判定为 TRUE
B.如果最后的 FETCH 返回一行,则判定为 FALSE
– %FOUND
A.如果最后的 FETCH 返回一行,则判定为 TRUE
B.如果因为没有多行而使最后的 FETCH 失败,则判定为 FALSE
– %ROWCOUNT
A.返回当前从活动集合获取的行数 – %ISOPEN
A. 如果打开显示游标,则判定为 TRUE B. 如果关闭显示游标,则判定为 FALSE
B.要使用这些属性,只要简单地将它们添加到游标名后即可 IF emp_cur%ISOPEN THEN
FETCH emp_cur INTO m_rec; IF emp_cur%FOUND THEN
msr_no := emp_cur%ROWCOUNT;
END IF; ELSE
OPEN emp_cur; END IF;
七.游标 FOR 循环
A.将它的循环索引声明为 %ROWTYPE 的记录 B.隐式地打开游标
C.从活动集反复获取行的值并传送到记录中的字段
D.在处理完所有行,并且循环退出时,隐式地关闭游标
E.为满足与游标名相关的查询的每一行执行循环结构中的语句
F.游标 FOR 循环用于简化代码编写
DECLARE
CURSOR emp_cur IS
SELECT empno, ename, job, sal FROM emp;
BEGIN
FOR mrec IN emp_cur LOOP
INSERT INTO temp
VALUES( mrec.empno,mrec.ename,mrec.job, mrec.sal); END LOOP; END;
八.参数化的游标
A.游标也可接收参数
B.这些参数仅可用于游标的 SELECT 语句的输入 C.游标参数可以在查询中常量出现的任何位置上出现 D.可以在 OPEN 语句或游标 FOR 循环中提供参数值
DECLARE
CURSOR emp_cur IS
SELECT empno, ename, job, sal FROM emp WHERE job = pjob; mjob emp.job%TYPE ;
BEGIN
mjob := ‘&job’;
FOR mrec IN emp_cur(mjob) LOOP
statements; END LOOP; END;
九.游标 FOR UPDATE OF 和 CURRENT OF
A.CURRENT OF 子句用于在 UPDATE 或 DELETE 语句中以引用游标当前行 B.必须使用 FOR UPDATE OF 子句声明游标,并在一行上打开并定位
C.如果游标没有打开,则 CURRENT OF 子句将产生错误
D.如果游标已经打开,但没有处理 FETCH 或最后一个 FETCH 没有返回任何行 ,则将产生预定义例外
NO_DATA_FOUND DECLARE
CURSOR emp_cur IS
SELECT empno, ename, job, sal FROM emp WHERE job = pjob FOR UPDATE OF sal;
BEGIN
FOR mrec IN emp_cur LOOP
UPDATE emp SET sal = sal * 0.15 WHERE CURRENT OF emp_cur; END LOOP; END;
隐式游标的属性
(1)虽然OPEN、CLOSE 和FETCH 语句不能用于操作 SQL% 游标,但属性可以用于访问游标的环境区域 (2)在游标自动打开之前,属性判定为 NULL
(3)下列四个游标属性可以用于访问 SQL% 游标的环境区域
A.SQL%NOTFOUND:
● 如果INSERT,UPDATE或DELETE 语句没有影响行,则判定为 TRUE ,否则判定为FALSE。 B.SQL%FOUND:
? 逻辑上与 SQL%NOTFOUND 相反
? 如果 INSERT 、 UPDATE 或 DELETE 影响了一行或多行,则判定为 TRUE ,否则判定为 FALSE C.SQL%ROWCOUNT:
? 返回 INSERT 、 UPDATE 或 DELETE 语句影响的行数 D.SQL%ISOPEN:
? Oracle 执行完与其关联的 SQL语句后,将自动关闭隐式游标
? 对于隐式游标,总是将 SQL%ISOPEN 判定为 FALSE DELETE FROM emp WHERE empno = 7864; IF SQL%NOTFOUND THEN
..... .....
END IF;
十.PL/SQL 表
A. TABLE 类型的对象称为 PL/SQL 表
B. 可以将其可视化为单维的、具有无限多个元素的垂直数组 C. 表大小不受限制,即添加新行时它的大小将增加 D. PL./SQL 表使用主键,对行进行类似于数组那样的访问 E. PL/SQL 表的声明分为两个步骤
(1).定义一个 TABLE 类型:
TYPE <类型名> IS TABLE OF {列类型 | 变量数据类型 } [NOT NULL] INDEX BY BINARY_INTEGER; (2).声明该类型的 PL/SQL 表:
F. 可以通过使用具有类似于数组语法的主键值来引用行:
name_table(3)
G. 还可以将 PL/SQL 表达式的值赋予给特定行:
name_table(5) := ‘MICKY’;
十一.PL/SQL 记录
A.类型为 RECORD 的对象称为 PL/SQL 记录
B.PL/SQL 记录具有唯一命名的字段,这些字段可以属于不同的数据类型
C.通过两个步骤对 PL/SQL 记录进行了声明 (1).定义一个 RECORD 类型
TYPE <类型名> IS RECORD
(fieldname1 <字段类型> [NOT NULL] :
fieldnameN <字段类型> [NOT NULL]);
(%TYPE 和 %ROWTYPE 可用于指定 <字段类型> ] (2).声明该类型的 PL/SQL记录
D. 只有对字段进行了初始化后才可以添加 NOT NULL 约束
TYPE route_rec_type IS RECORD
( route_code VARCHAR2(7) NOT NULL := ‘SAN-LOU’,
first_fare fare.first_fare%TYPE, eco_fare fare.eco_fare%TYPE);
route_rec route_rec_type; E. 可以在声明中初始化记录 TYPE timetype IS RECORD ( tsecond SMALLINT :=0, tminute SMALLINT := 0,
thour SMALLINT := 0);
F. 声明了 timetype 类型的记录后,字段初始值为零
G.可以使用点号引用记录中的字段 :
route_rec.eco_fare
H.可以一次对所有字段赋值
(1).通过将一个记录赋值给另一个具有相同类型的记录
route_rec1 := route_rec2;
(2).使用 SELECT INTO 或 FETCH INTO 语句
SELECT route_code, first_fare, eco_fare INTO route_rec1 FROM fare
WHERE route_code = ‘SAN-LOU’; (列名称必须按照与记录中字段相同的顺序出现) I. 一个记录可以是另一个记录的组件
J. PL/SQL 允许声明并引用嵌套记录
TYPE timetype IS RECORD
( tminute SMALLINT, thour SMALLINT); TYPE meetingtype IS RECORD ( mday DATE,
mtime timetype); meeting meetingtype; seminar meetingtype;
TYPE partytype IS RECORD
( pday DATE,
ptime timetype);
party partytype;
K. PL/SQL 允许嵌套记录赋值给另一个具有相同数据类型的记录 :seminar.time := meeting.time;
L. 如果所包括的记录属于不同的数据类型,也允许一个嵌套记录赋值给另一个记录 :party.time := meeting.time;
正在阅读:
ORACLE中游标和复合数据类型04-11
聂耳的音乐创作的风格特点和历史地位分析08-31
高考考场记叙文结构模式例谈04-25
美国第44任总统贝拉克 侯赛因 奥巴马就职演说(全文)07-29
覆膜砂型芯负压铸造转向节叉工艺的应用08-30
一级注册消防工程师考试(实务,能力 案例三科)必备知识点全浓缩03-14
物理治疗学题库01-08
2010年内蒙古公务员招录申论真题及解析08-19
聚氨酯常用红外(FTIR)知识02-03
二丙二醇甲醚03-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 游标
- 复合
- 类型
- 数据
- ORACLE
- 高新技术企业认定 - 科技成果转化组织实施与激励奖励制度
- “家乡特产”主题活动随想
- 上大专升本基础会计习题及答案
- 级机电一体化毕业设计(论文) - 机械手设计
- HM特许经营管理案例分析
- 第6章 分子结构和晶体结构 课后习题及参考答案Yao
- S2201回采作业规程
- 重庆市情课程作业评讲(2)
- 人力资源管理师复习资料
- 小学二年级下册有余数除法竖式计算题100题
- Oracle游标使用方法及语法大全
- 供配电收费文件
- SDH题库
- 社区经济普查总结
- 日照职业技术学院大学生艺术团章程
- 06《雪心赋》原著解析(卷三)
- 上海2017年上半年农村信用社招聘:神情举止篇模拟试题
- 砖厂煤矸石多孔烧结砖生产线脱硫除尘工程
- 肺栓塞诊疗(2)-临床表现及检查方法
- 银行间债券市场开户备案需提交的材料