光标(游标)概念引入
就是一个结果集(查询或者其他操作返回的结果是多个时使用)
定义一个光标
cursor c1 is select ename from emp;

从光标中取值
打开光标:
--open c1;(打开光标执行查询)
关闭光标:
--close c1;(关闭游标释放资源)
取一行光标的值:
--fetch c1 into pename;(取一行到变量中)

fetch的作用:
--把当前指针指向的记录返回
--将指针指向下一条记录

使用光标查询员工姓名和工资,并打印
declare
--定义一个光标
cursor cemp is select ename,sal from emp;
--为光标定义对应的变量
pename emp.ename%type;
psal emp.sal%type;
begin
--打开光标
open cemp;

loop
--取一条记录
fetch cemp into pename,psal;

--思考:1、循环什么时候退出? 2、fetch不一定能取到记录
--exit when 没有取到记录;

exit when cemp%notfound;

--打印
dbms_output.put_line(pename||'的薪水是'||psal);

end loop;
--关闭光标
close cemp;
end;

1、光标的属性:
%found 取到值就是found
%notfound 取不到是这个

示例:给员工涨工资(根据职位涨工资)
总裁涨1000
经理涨800
其他员工涨400
更改表中的job为empjob,

--涨工资之前的薪水
select ename,job,sal from emp;

set serveroutput on
declare
--定义光标代表给哪些员工涨工资
--alter table 'SCOTT' 'EMP' rename column 'JOB' to empjob
--定义一个光标
cursor cemp is select empno,empjob from emp;
--为光标定义对应的变量
pempno emp.empno%type;
pjob emp.empjob%type;
begin
rollback;
--打开光标
open cemp;

loop
--取一条记录
fetch cemp into pempno,pjob;
exit when cemp%notfound;

--判断员工的职位
if pjob = 'PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;
elsif pjob='MANAGER' then update emp set sal=sal+800 where empno=pempno;
else update emp set sal=sal+400 where empno=pempno;
end if;
end loop;
--关闭光标
close cemp;

--对于oracle,默认的事务隔离级别是read committee
--事务的ACID(原子性/一致性/隔离性/持久性)
commit;
DBMS_OUTPUT.PUT_LINE('涨工资完成');
end;

1、光标的属性;
%found(取到值为true)
%notfound(取不到值为true)
%isopen(判断光标是否打开,因为oracle数据库默认一个会话中打开的光标数是有限制的300个)
%rowcount(影响的行数,即已经被提取的行数,并非集合中的总行数)。

事例1:%isopen用法

set serveroutput on
declare
--定义一个光标
cursor cemp is select empno,empjob from emp;
--为光标定义对应的变量
pempno emp.empno%type;
pjob emp.empjob%type;
begin
--打开光标
open cemp;

if cemp%isopen then
DBMS_OUTPUT.PUT_LINE('光标已经打开');
else
DBMS_OUTPUT.PUT_LINE('光标没有打开');

end if;
--关闭光标
close cemp;
end;

事例2:%rowcount用法

set serveroutput on
declare
--定义一个光标
cursor cemp is select empno,empjob from emp;
--为光标定义对应的变量
pempno emp.empno%type;
pjob emp.empjob%type;
begin
--打开光标
open cemp;
loop
--取出一条记录
fetch cemp into pempno,pjob;
exit when cemp%notfound;

--打印rowcount的值
DBMS_OUTPUT.PUT_LINE('rowcount'||cemp%rowcount);

end loop;
--关闭光标
close cemp;
end;

2、光标的限制,默认情况下,orcle数据库只允许在同一个会话中,打开300个光标
--切换到管理员
conn sys/1234 as sysdba
--查看参数
show parameter cursor

修改光标数量的限制
alter system set open_cursors=400 scope=both;

scope的取值有三个
both(后两个同时更改),memory,spfile(数据库需要重启)

3、带参数的光标
--查询某个部门中员工的姓名
set serveroutput on
declare
---定义带参数的光标
cursor cemp(dno number) is select ename from emp where deptno=dno;
pename emp.ename%type;

begin
--打开光标
open cemp(10);
loop
--取出一条记录
fetch cemp into pename;
exit when cemp%notfound;

DBMS_OUTPUT.PUT_LINE(pename);

end loop;
--关闭光标
close cemp;
end;

***********光标是SQL中代替集合(数组)使用的参数.**********

Oracle学习笔记(十)的更多相关文章

  1. Oracle学习笔记十 使用PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  2. Oracle学习笔记(十二)

    十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...

  3. Oracle学习笔记十四 内置程序包

    扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STAND ...

  4. Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包

    子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中.   子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...

  5. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  6. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  7. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

  8. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  9. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

随机推荐

  1. C语言使用pthread多线程编程(windows系统)二

    我们进行多线程编程,可以有多种选择,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK实现了的线程库,如果你想让你的程序有更多的移植性你最好是选择POSIX中的Pthread函数库,我 ...

  2. web应用中的Filter过滤器之基础概述

    1 过滤器概述 当web容器接收到对一个资源的请求时,它将判断是否有过滤器与这个资源相关联,如果有,那么容器将把这个请求交给过滤器进行处理.在过滤器中,你可以改变请求的内容或者重新设置请求的报头信息, ...

  3. linux之 LVM扩容

    1. 查看本机现在磁盘的情况[root@oralce10g ~]# df Filesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/ ...

  4. security自动登陆

    package*.security; import java.util.ArrayList; import javax.servlet.http.Cookie; import javax.servle ...

  5. VB中Excel 2010的导入导出操作

    VB中Excel 2010的导入导出操作 编写人:左丘文 2015-4-11 近来这已是第二篇在讨论VB的相关问题,今天在这里,我想与大家一起分享一下在VB中如何从Excel中导入数据和导出数据到Ex ...

  6. eaccelerator详解

    之前在看书的时候看到一个eaccelerator,以前也没用过 不知道是啥东东,不知道以后会用到不,先mark一下吧 eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了 ...

  7. ESN

    1.对于一般的硬件设备,ESN是设备序列号,主要用来识别设备,包括未来服务鉴权的需要 2.对于需要license的设备,ESN也是设备序列号的意思,只不过这个序列号可能是根据设备硬件信息算出来的一串字 ...

  8. migrating-vcenter-database-express-to-sql-2008-r2

    migrating-vcenter-database-express-to-sql-2008-r2 一.      准备环境. ESXi5.0主机      IP:192.168.1.158      ...

  9. windows8.1中组件服务DCOM配置里属性灰色不可修改的解决办法

    由于电脑升级,更换成了windows8.1的64位操作系统,今天遇到组件服务中DCOM配置里IIS Admin Service属性呈现灰色,不能修改. 查找官方文档,原来这是win8.1 x64的安全 ...

  10. PHP调用OCX控件的具体方法

    需要设置php.ini文件,找到这行com.allow_dcom=true,把com组件支持启用 使用PHP调用OCX控件,本不是个难题,但现实中采用flash回避的方法更通用.真正使用ocx的不多, ...