全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle中,游标是操作数据最常用,也是最有效的方法根据Oracle游标的声明方法不同,可以将Oracle的游标分为显式和隐式两种显式游标就是有明确声明的游标,显式游标的操作主要有如下几类:第一,游标的声明:声明游标时,要用关键字CURSOR ,如 CURSOR CUR_SAMPLE IS SELECT * FROM TAB;其中,CURSOR, IS 为关键字, CUR_SAMPLE 为游标名称,后面的 SELECT 语句是与游标关联的查询语句.这几部分不能少.第二,参数传递:在声明游标时,不仅可以使用上面的方法:CURSOR CUR_SAMPLE IS SELECT * FROM TAB;同时,也可以给游标传递参数,CURSOR CUR_SAMPLE(PAR_TABLENAME VARCHAR2(24) IS SELECT * FROM TAB WHERE TNAME = PAR_TABLENAME;给游标传递的参数可以是多个,也可以是不同的类型.但是参数只能传入,不能传出.在指定参数的同时,可以同时设定默认值.如: CURSOR CUR_SAMPLE(PAR_TABLENAME VARCHAR2(24) DEFAULT EMPLOYEES) IS SELECT * FROM TAB WHERE TNAME = PAR_TABLENAME;第三,声明游标变量用下面的方法声明一个游标:CURSOR CUR_SAMPLE IS SELECT * FROM TAB;但在使用游标时,必段要声明游标变量或其它变量,存放从游标中取出的数据:游标变量类型可以有两种:(1) 定义游标类型的变量:C_SMAPLE CUR_SAMPLE%ROWTYPE;(2)声明一个变量列表:M_TNAME VARCHAR2(30);M_TABTYPE VARCHAR2(7);M_CLUSTERID NUMBER(5);第四,打开游标在操作数据之前,首先要打开游标:先声明一个游标:CURSOR CUR_SAMPLE IS SELECT * FROM TAB;然后再打开:OPEN CUR_SAMPLE;对于有参数的游标,在打开时,需要同时传递参数:如游标声明如下:CURSOR CUR_SAMPLE(PAR_TABLENAME VARCHAR2(24) DEFAULT EMPLOYEES) IS SELECT * FROM TAB WHERE TNAME = PAR_TABLENAME;打开方法如下:OPEN CUR_SAMPLE(EMPLOYEES);但时,如果参数有默认值,并且想使用默认值,可以直接:OPEN CUR_SAMPLE;此时,PAR_TABLENAME值等于EMPLOYEES,也就是相当于OPEN CUR_SAMPLE(EMPLOYEES);但是如果打开一个已经打开的游标,会报错:ORA-06511:PL/SQL:cursor already open;OPEN 一个游标时,游标的指针自动的指向活动集的第一条记录.第五,读取游标数据:读取数据之前,游标一定要先打开:需要传递参数的,用参数打开,不需要参数的,可以直接打开.读取数据也就是用 FETCH 方法把数据读取到变量中.对于游标类型的变量,可以用下面的方法: (游标参数的定义请看第三)FETCH CUR_SAMPLE INTO C_SAMPLE;也可以FETCH CUR_SMALE INTO M_TNAME,M_TABTYPE,M_CLUSTERID;使用变量列表时,变量列表的顺序一定要和游标活动结果集中的字段顺序相同.如果用游标类型的变量时,用以下的方法访问其中的值:C_SMAPLE.TNAME,C_SAMPLE.TABTYPE,C_SAMPLE.CLUSTERID;对于用变量列表的方法,直接使用变量名称就可以了.执行 FETCH 一次,游标指针自动的移到下一条记录.第六,关闭游标:关闭游标最简单,直接CLOSE 游标名; 就可以了.如对游标:CURSOR CUR_SAMPLE IS SELECT * FROM TAB;就可以:CLOSE CUR_SAMPLE;游标是否有参数,关闭方法相同.使 用游标可以极大方便PL/SQL的编写,但游标也比较特殊,如游标数据只能用FETCH来读取,游标指针的移动在FETCH数据时,自动的移到下一条,游 标打开时,游标指针自动的指向第一条记录,另外,游标是用静态的方法打开的,也就是游标打开后,如果相关表执行DML(DELETE, INSERT, UPDATE)操作,其操作结果是不能反映到游标中来的,只能先关闭游标,再打开游标,才可以更新游标活动集的数据.例如:declarev_ab air.a%type;v_dname integer(10);cursor v_cur is select a,b from air;beginopen v_cur;loopfetch v_cur into v_ab,v_dname;exit when v_cur%notfound;dbms_output.put_line(a|v_ab|,b|v_dname);end loop;dbms_output.put_line(total count|v_cur%rowcount);end;例如:set serveroutput on;create or replace procedure tcissqlstr varchar2(100);tname varchar2(100);t_owner varchar2(100);t_count number;cursor v_cur is select owner,table_name from dba_tables where owner=AIR order by table_name;beginopen v_cur;loopfetch v_cur into t_owner,tname;exit when v_cur%notfound;t_count := 0 ;sqlstr := select count(*) from |t_owner|.|tname; execute immediate sqlstr into t_count;dbms_output.put_line(t_owner|.|tname|: |to_char(t_count);end loop;close v_cur;end tc;/ set serveroutput on;declarejob_num number; cursor v_cur is select job from user_jobs;beginopen v_cur;loopfetch v_cur into job_num;exit when v_cur%notfound;dbms_output.put_line(begin sto
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁夏海原县一中2026届生物高一第一学期期末预测试题含解析
- 河南濮阳建业国际学校2025-2026学年化学高一第一学期期中综合测试试题含解析
- 辽宁石油化工大学《幼儿钢琴弹唱》2024-2025学年第一学期期末试卷
- 互联网教育市场前景分析报告
- 复合土工膜膜层厚度试验记录
- 豫剧伴我成长作文
- 浅谈如何提高女生声腔演唱艺术
- 本科毕业论文评语模板3
- 【作文评语】本科毕业论文指导老师评语3
- RMI落基山研究所:2025年互联小电网:从飞行员到发电站报告(英文版)
- 移动式压力容器充装(R2)特种作业证考试题库(附答案)
- 家居护理创业计划
- 2025年贵州省综合评标专家库考试题库(二)
- 2025年宜昌市市级机关公开遴选考试真题
- GB 31975-2025呼吸防护压缩空气技术要求
- 低压电工作业 课件 15 作业现场应急处理
- 途虎养车加盟协议合同
- 青少年无人机基础飞行课件
- 林木砍伐合伙合同协议书
- 2025年上海市事业单位招聘考试教师招聘英语学科专业知识试题
- 《中医舌诊》临床高清舌诊图附带解析史上
评论
0/150
提交评论