`
1140566087
  • 浏览: 548991 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18111
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:309984
Group-logo
J2ME 基础学习课程集
浏览量:18089
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17226
社区版块
存档分类
最新评论

Oracle 游标 静态游标

阅读更多
[size=medium][/size]SQL> set serveroutput on;
SQL> remark 游标:一个特定结果集中的行指针,它指向确定的记录,通过移动游标可以操作不同的行数据
SQL> remark 游标的类型:静态游标  引用游标
SQL> remark 静态游标分为:隐式游标  显示游标
SQL> remark 隐式游标:系统进行查询和修改操作的时候自动调用的
SQL> remark 显示游标:开发人员显示的定义游标的查询语句
SQL> remark 游标的属性 4  个:
SQL> remark %isopen %found %notfound %rowcount 对应的关系分别是:
SQL> remark %isopen :判断游标是否被打开  true/false;
SQL> remark %found :判断游标的行是否有效 与 %nofound 结果是相反的
SQL> remark %rowcount 返回当前位置为止游标读取的记录行数。 值为整数
SQL> remark ....显示游标-普通游标--.................
SQL> declare
  2  cursor curemp is select empno ,ename from emp;
  3  theempno emp.empno%type;
  4  theename emp.ename%type;
  5  begin
  6  open curemp;
  7  loop
  8  fetch curemp into theempno,theename;
  9  exit when curemp%nofound;
10  dbms_output.put_line('theempno'||theempno);
11  end loop;
12  close curemp;
13  end;
14  /
exit when curemp%nofound;
                 *
ERROR at line 9:
ORA-06550: line 9, column 19:
PLS-00208: identifier 'NOFOUND' is not a legal cursor attribute
ORA-06550: line 9, column 2:
PL/SQL: Statement ignored


SQL> edit;
Wrote file afiedt.buf

  1  declare
  2  cursor curemp is select empno ,ename from emp where deptno=30;
  3  theempno emp.empno%type;
  4  theename emp.ename%type;
  5  begin
  6  open curemp;
  7  loop
  8  fetch curemp into theempno,theename;
  9  exit when curemp%notfound;
10  dbms_output.put_line('theempno'||theempno);
11  end loop;
12  close curemp;
13* end;
SQL> /
theempno7499                                                                   
theempno7521                                                                   
theempno7654                                                                   
theempno7698                                                                   
theempno7844                                                                   
theempno7900                                                                   

PL/SQL procedure successfully completed.

SQL> remark 使用fetch从游标中获取数据给参数赋值的时候要与查询语句匹配,如果查询语句式select * from....那么需要定一个rowtype的变量
SQL> declare
  2  emprow emp%rowtype;
  3  cursor empcur is select * from emp where deptno=30;
  4  begin
  5  open empcur;
  6  loop
  7  fetch empcur into emprow;
  8  exit when empcur%notfound;
  9  dbms_output.put_line('编号:'||emprow.empno);
10  end loop;
11  close empcur;
12  end;
13  /
编号:7499                                                                     
编号:7521                                                                     
编号:7654                                                                     
编号:7698                                                                     
编号:7844                                                                     
编号:7900                                                                     

PL/SQL procedure successfully completed.

SQL> remark RowType 类型,能获取一整行的结果集;
SQL> remark 使用显示游标的时候应该注意事项:
SQL> remark 显示游标一定关联一个查询的结果集,并且在游标定义的时候就更这个结果集绑定到了一起;
SQL> remark ............隐式游标...................
SQL> remark 对于隐式游标而言SQL%ISOPEN总是false,这是因为隐式游标在DML语句执行的时候打开,结束时就立刻关闭了。例如:
SQL> begin
  2  update emp set sal=sal*1.1 where deptno=30;
  3  DBMS_OUTPUT.PUT_LINE('被修改记录的条数为:'||SQL%ROWCOUNT);
  4  END;
  5  /
被修改记录的条数为:6                                                          

PL/SQL procedure successfully completed.

SQL> REMARK ...............................................................
SQL> REMARK ............带参数的游标.....................................
SQL> REMARK 在ORACLE中设定的参数只能在定义游标的查询中使用。
SQL> EDIT
Wrote file afiedt.buf

  1  DECLARE
  2  THEEMPNO EMP.DEPTNO%TYPE;
  3  EMPROW EMP%ROWTYPE;
  4  CURSOR EMPCUR(DELDEPTNO EMP.DEPTNO%TYPE) IS SELECT * FROM EMP WHERE DEPTNO=DELDEPTNO;
  5  BEGIN
  6  THEEMPNO:=&员工编号;
  7  OPEN EMPCUR(THEEMPNO);
  8  DBMS_OUTPUT.PUT_LINE('游标的记录行数--'||EMPCUR%ROWCOUNT);
  9  LOOP
10  FETCH EMPCUR INTO EMPROW;
11  EXIT WHEN EMPCUR%NOTFOUND;
12  DBMS_OUTPUT.PUT_LINE('编号:'||EMPROW.EMPNO||'员工姓名:'||EMPROW.ENAME);
13  END LOOP;
14  DBMS_OUTPUT.PUT_LINE('游标的记录条数为:'||EMPCUR%ROWCOUNT);
15  CLOSE EMPCUR;
16* END;
SQL> /
Enter value for 员工编号: 20
old   6: THEEMPNO:=&员工编号;
new   6: THEEMPNO:=20;
游标的记录行数--0                                                              
编号:7369员工姓名:SMITH                                                      
编号:7566员工姓名:JONES                                                      
编号:7788员工姓名:SCOTT                                                      
编号:7876员工姓名:ADAMS                                                      
编号:7902员工姓名:FORD                                                       
游标的记录条数为:5                                                            

PL/SQL procedure successfully completed.

SQL> REMARK 循环游标
SQL> REMARK 操作游标的过程:打开  循环取游标数据,操作数据 关闭游标的动作
SQL> REMARK 使用循环游标可以省去这些烦琐
SQL> DECLARE
  2  CURSOR EMPCUR IS SELECT * FROM EMP WHERE DEPTNO=30;
  3  BEGIN
  4  FOR EMPROW IN EMPCUR
  5  LOOP
  6  DBMS_OUTPUT.PUT_LINE('编号:'||EMPROW.EMPNO||'姓名:'||EMPROW.ENAME);
  7  END LOOP;
  8  END;
  9  /
编号:7499姓名:ALLEN                                                          
编号:7521姓名:WARD                                                           
编号:7654姓名:MARTIN                                                         
编号:7698姓名:BLAKE                                                          
编号:7844姓名:TURNER                                                         
编号:7900姓名:JAMES                                                          

PL/SQL procedure successfully completed.

SQL> REMARK FOR 查询变量 IN 游标变量;
SQL> REMARK 查询变量的使用不需要声明
SQL> REMARK 查询变量是一个行对象,其结构与查询语句查询列表一致。
SQL> REMARK 获取的方法:查询变量.列名;
SQL> REMARK 查询变量只能取数据,不能给查询变量赋值;
SQL> REMARK ..........................................................
SQL> REMARK 0........................................................
SQL> REMARK 利用游标修改数据
SQL> REMARK 使用游标修改数据是:逐条获取,逐条处理;利用游标进行数据查询,需要在打开游标的时候就进行数据的锁定;
SQL> REMARK 锁定数据的语法:
SQL> REMARK 游标定义语法:CURSOR 游标名称 IS 查询语句 FOR UPDATE;
SQL> REMARK 对当前游标进行删除和修改的语法:
SQL> REMARK UPDATE 语句 WHERE CURRENT OF 游标名称;
SQL> REMARK DELETE 语句 WHERE CURRENT OF 游标名称;
SQL> DECLARE
  2  CURSOR EMPCUR IS SELECT * FROM EMP FOR UPDATE;
  3  BEGIN
  4  FOR EMPROW IN EMPCUR
  5  LOOP
  6  IF EMPROW.DEPTNO=20 THEN
  7  DBMS_OUTPUT.PUT_LINE('被删除的记录编号为:'||EMPROW.EMPNO);
  8  DELETE FROM EMP WHERE CURRENT OF EMPCUR;
  9  END IF;
10  END LOOP;
11  END;
12  /
被删除的记录编号为:7369                                                       
被删除的记录编号为:7566                                                       
被删除的记录编号为:7788                                                       
被删除的记录编号为:7876                                                       
被删除的记录编号为:7902                                                       

PL/SQL procedure successfully completed.

SQL> SPOOL OFF;
[color=olive][/color]
分享到:
评论

相关推荐

    静态、动态sql及各种游标

    静态、动态sql及各种游标,适合初学者学习

    数据库嵌入式SQL介绍与应用

    1.2 什么是静态SQL和动态SQL? 4 1.3 什么是SQLCA? 4 1.4 什么是SQLDA? 5 第二节 SYBASE SQL SERVER嵌入式SQL语言 5 2.1 一个嵌入SQL语言的简单例子 5 2.2 嵌入SQL的处理过程 6 2.3 嵌入SQL语句总览 7 2.3.1 宿主...

    Woodpecker for Oracle

    Woodpecker for Oracle用以收集Oracle数据库的性能数据、参数设置等,为数据库的调整与优化提供详细可靠的动态和静态指标。Woodpecker内置监视的系统信息包括数据字典、SQL及游标、命中率、重做日志、回滚段、共享池...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    ESQLC资料(完全版)

    1.2 什么是静态SQL和动态SQL?4 1.3 什么是SQLCA?4 1.4 什么是SQLDA?5 第二节 SYBASE SQL SERVER嵌入式SQL语言5 2.1 一个嵌入SQL语言的简单例子5 2.2 嵌入SQL的处理过程6 2.3 嵌入SQL语句总览7 2.3.1 宿主变量7 ...

    嵌入式SQL(E-SQL)简介

    1.2 什么是静态SQL和动态SQL? 4 1.3 什么是SQLCA? 4 1.4 什么是SQLDA? 5 第二节 SYBASE SQL SERVER嵌入式SQL语言 5 2.1 一个嵌入SQL语言的简单例子 5 2.2 嵌入SQL的处理过程 6 2.3 嵌入SQL语句总览 7 2.3.1 宿主...

    嵌入SQL资料

    1.2 什么是静态SQL和动态SQL?4 1.3 什么是SQLCA?4 1.4 什么是SQLDA?5 第二节 SYBASE SQL SERVER嵌入式SQL语言5 2.1 一个嵌入SQL语言的简单例子5 2.2 嵌入SQL的处理过程6 2.3 嵌入SQL语句总览7 2.3.1 宿主...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    ESQLC资料 informax

    1.1.2 什么是静态SQL和动态SQL? 5 1.1.3 什么是SQLCA? 5 1.1.4 什么是SQLDA? 5 1.2 第二节 SYBASE SQL Server嵌入式SQL语言 5 1.2.1 一个嵌入SQL语言的简单例子 5 1.2.2 嵌入SQL的处理过程 7 1.2.3 嵌入SQL语句总览...

    ESQLC资料 informix (加上星级评论后可以返还11分)

    1.1.2 什么是静态SQL和动态SQL? 5 1.1.3 什么是SQLCA? 5 1.1.4 什么是SQLDA? 5 1.2 第二节 SYBASE SQL Server嵌入式SQL语言 5 1.2.1 一个嵌入SQL语言的简单例子 5 1.2.2 嵌入SQL的处理过程 7 1.2.3 嵌入SQL语句总览...

    oracle+proc中文.pdf

    4.1.3 静态和动态SQL语句....................................................................................................12 4.1.4 嵌入的PL/SQL语句块.....................................................

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    Oracle_day04,游标,存储过程,存储函数,触发器 11-Maven(学习2天) Maven_day01._Maven安装.Maven整合SSH Maven_day02.Maven整合SSH.私服安装配置 12-SSH企业案例2_ERP_项目整合(学习15天) ERP_day01_ERP简介...

    SQL21日自学通

    静态SQL 与动态SQL277 使用SQL 来编程279 总结280 问与答280 校练场280 练习281 第14 天动态使用SQL 282 目标282 快速入门282 ODBC 282 Personal Oracle 7283 InterBase SQL ISQL 283 Visual C++ 284 Delphi284 设置...

    百万级的分页存储过程

    百万级的分页存储过程 CREATE PROCEDURE sp_paging @sqlstr NVARCHAR(4000), --查询字符串 @currentpage INT, --第N页>=1 @pagesize INT --每页行数 AS SET NOCOUNT ON declare @P1 INT, --P1是游标的id

    php网络开发完全手册

    13.3.2 ORACLE 207 13.3.3 SYBASE 207 13.3.4 DB2 207 13.3.5 SQL Server 207 13.4 SQL语言简介 207 13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式...

    Java面试宝典2020修订版V1.0.1.doc

    游标是什么? 43 10、视图的优缺点 43 11、列举几种表连接方式,有什么区别? 43 12、主键和外键的区别? 44 13、在数据库中查询语句速度很慢,如何优化? 44 14、数据库三范式是什么? 44 15、union和union all有什么...

    JAVA面试题最全集

    动态游标与静态游标的区别? 84.dotnet由哪几个基本框架组成? 85.Oracle中SGA是什么? 86.web servers是什么? 87.UNIX中QT是什么意思? 88.在软件开发生命周期中的哪个阶段开始测试? 89.dotnet与J2EE的比较? 90....

    java基础题 很全面

    6. 写一段Jdbc连Oracle的程序. 32 7. 编码实现内部类 34 8. 输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset 34 9. 如何去小数点前两位,并四舍五入...

    千方百计笔试题大全

    199、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。 47 200、xml有哪些解析技术?区别是什么? 48 201、你在项目中用到了xml技术的哪些方面?如何实现的? 48 202、用jdom解析xml文件时...

Global site tag (gtag.js) - Google Analytics