Oracle学习笔记(十)
光标(游标)概念引入
    就是一个结果集(查询或者其他操作返回的结果是多个时使用)
定义一个光标
    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学习笔记(十)的更多相关文章
- Oracle学习笔记十 使用PL/SQL
		
PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...
 - Oracle学习笔记(十二)
		
十三.存储过程和存储函数1.掌握存储过程(相当于建立一个函数或者方法体,然后通过外部对其调用) 指存储在数据库中供所有程序调用的子程序叫做存储过程或存储函数. 相同点: 完成特定功能的程序 区别: 是 ...
 - Oracle学习笔记十四 内置程序包
		
扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STAND ...
 - Oracle学习笔记十二 子程序(存储过程、自定函数)和程序包
		
子程序 子程序:命名的 PL/SQL 块,编译并存储在数据库中. 子程序的各个部分: 1.声明部分 2.可执行部分 3.异常处理部分(可选) 子程序的分类: 1.过程 - 执行某些操作 2.函数 ...
 - Oracle学习笔记三 SQL命令
		
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
 - python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
		
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
 - Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation
		
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...
 - oracle学习笔记第一天
		
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
 - python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
		
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
 
随机推荐
- DB2经常使用命令
			
1.打开命令行窗体 #db2cmd 2.打开控制中心 # db2cmd db2cc 3.打开命令编辑器 db2cmd db2ce =====操作数据库命令===== 4.启动数据库实例 #db2s ...
 - 在AD中存取照片
			
AD中有存放照片的字段吗? 答案肯定是有的.photo,jpegPhoto,thumbnailPhoto 前端时间客户,包括领导 在问通讯录中的照片为什么存在数据库中而不是AD中,AD中的属性能不能利 ...
 - sysbench 测试mysql性能
			
===== #1sysbench --test=oltp --oltp-table-size=10000 --mysql-db=test --mysql-user=root --mysql-passw ...
 - SouthidcEditor编辑器如何支持上传png图片
			
SouthidcEditor编辑器如何支持上传png图片? asp网站一般都是用的南方数据SouthidcEditor编辑器,可是这个编辑器上传图片功能不能上传png类型的图片,那怎么办?我(红蜘蛛网 ...
 - C# 与 Oracle 中 BINARY_DOUBLE数据类型查询
			
Oracle 10g新增 BINARY_DOUBLE 数据类型,而.NET暂不支持这个类型,查询时需要转换为 NUMBER. eg: "SELECT RAWTOHEX(OID) AS OID ...
 - webpack和webpack-dev-server安装配置
			
本文转载自:https://www.cnblogs.com/xuehaoyue/p/6410095.html 跟着Webpack傻瓜式指南(一)这个教程在安装webpack和webpack-dev-s ...
 - 生成式对抗网络(GAN)
			
生成对抗网络(GAN),是深度学习模型之一,2014年lan Goodfellow的开篇之作Generative Adversarial Network, GAN概述 GAN包括两个模型,一个是生成模 ...
 - vue语法精简(方便开发查阅)
			
vue语法精简(方便开发查阅) 指令 特殊的标签和属性 变异方法 事件修饰符 按键修饰符 表单修饰符 生命周期函数 计算属性 监听属性 子组件通过事件向父组件传递信息 在组件上使用v-model 动画 ...
 - 关于eclipse open call hierarchy功能的一个细节
			
这个功能对应的快捷键是ctrl alt H,大家应该都很熟悉了.默认是查找这个方法的被调用堆栈.90%的人应该也是习惯这个默认的功能的,也基本无视它的另一个功能. 昨天重启eclipe之后,我的ecl ...
 - IOS AudioServicesPlaySystemSound 后台锁屏播放
			
AudioServicesPlaySystemSound 想在锁屏后台播放报警提示音. 添加了UIBackgroundModes,audio,官方审核不通过! IOS的闹钟是怎么实现的,锁屏不能播放声 ...