--游标
一、显式游标
通过使用显式游标,不仅可以一行一行地处理SELECT语句的结果,而且可以更新或删除当前游标行的数据。
需要注意的是,如果通过游标更新或删除数据,在定义游标时必须要带有FOR UPDATE子句。
DECLARE
CURSOR emp_cursor IS SELECT * FROM emp FOR UPDATE;
BEGIN
FOR emp_record IN emp_cursor LOOP
IF emp_record.deptno=3 THEN
UPDATE emp SET sal=sal+200 WHERE CURRENT OF emp_cursor;
dbms_output.put_line('雇员名: '||emp_record.ename||',部门号:'||emp_record.deptno||
',原工资:'||emp_record.sal|| ',新工资:'||(emp_record.sal+200));
ELSE
dbms_output.put_line('姓名:'||emp_record.ename||',部门号:'||emp_record.deptno||',工资:'||
emp_record.sal);
END IF;
END LOOP;
END;
二、隐式游标
隐式游标,是指不显式标注定义、打开和关闭部分的游标。如,在循环体中:
BEGIN
FOR cur IN (SELECT name FROM dept) LOOP
DBMS_OUT.PUT_LINE(cur.name);
END LOOP;
END;
/
三、 Ref Cursor(动态游标):
1) 与隐式Cursor,显式Cursor的区别:Ref Cursor是可以通过在运行期间传递参数来获取数据结果集。而另外两种Cursor,是静态的,在编译期间就决定数据结果集。
2) Ref cursor的使用:
Type [Cursor type name] is ref cursor
Define 动态的Sql语句
Open cursor
操作数据---Fetch [Cursor name]
Close Cursor
--权限
1.如果给一个user用户授予一个表table的相应权限(INSERT UPDATE DELETE SELECT),然后又对该table表结构作相应的修改操作,
次时用户user对该表的权限将会丢失,必须重新为user授予权限。
--数组
在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE 和Table of Record来代替多维数组,一样挺好用的。
emp_type 就好象一个table 中的一条record 一样,里面有id, name,gender等。
emp_type_array 象个table, 里面含有一条条这样的record (emp_type),就象多维数组一样。
--单维数组
DECLARE
TYPE emp_ssn_array IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
best_employees emp_ssn_array;
worst_employees emp_ssn_array;
BEGIN
best_employees(1) := '123456';
best_employees(2) := '888888';
worst_employees(1) := '222222';
worst_employees(2) := '666666';
FOR i IN 1..best_employees.count LOOP
DBMS_OUTPUT.PUT_LINE('i='|| i || ', best_employees= ' ||best_employees(i)
|| ', worst_employees= ' ||worst_employees(i));
END LOOP;
END;
--多维数组
DECLARE
TYPE emp_type IS RECORD
( emp_id employee_table.emp_id%TYPE,
emp_name employee_table.emp_name%TYPE,
emp_gender employee_table.emp_gender%TYPE );
TYPE emp_type_array IS TABLE OF emp_type INDEX BY BINARY_INTEGER;
emp_rec_array emp_type_array;
emp_rec emp_type;
BEGIN
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara';
emp_rec.emp_gender := 'Female';
emp_rec_array(1) := emp_rec;
emp_rec.emp_id := 300000008;
emp_rec.emp_name := 'Rick';
emp_rec.emp_gender := 'Male';
emp_rec_array(2) := emp_rec;
FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE('i='||i
||', emp_id ='||emp_rec_array(i).emp_id
||', emp_name ='||emp_rec_array(i).emp_name
||', emp_gender = '||emp_rec_array(i).emp_gender);
END LOOP;
END;
用下面语句声明数组类型
type intarray is varry(30) of integer;
用下面语句声明一个数组变量
declare
A intarray;用下面语句声明数组类型
type intarray is varry(30) of integer;
用下面语句声明一个数组变量
declare
A intarray;用下面语句声明数组类型
type intarray is varry(30) of integer;
发表评论
-
大数据量转存(抽取、同步)
2012-11-22 01:23 640在大数据量的转存过程中,建议使用分批转存(不要一次转存过来 ... -
Oracle数据库优化要点总结
2012-10-22 10:33 647当oracle出现性能缓慢、 ... -
反向索引之应用
2012-10-19 15:54 726Oracle会自动为表的 ... -
PFILE与SPFILE差异
2012-10-17 11:56 7361.oracle实例启动时,寻找参数文件的顺序为 spf ... -
Oracle 分区简述
2012-10-12 12:01 648oracle8i起开始推出表分区的概念,最初只有范围分区、列表 ... -
Bitmap位图索引"高昂代价"与B-Tree比较
2012-10-10 08:54 601通过以下实验,来验证B ... -
关于Latch与Spin
2012-10-10 08:51 746latch 是一种轻量级用于保护oracle共享内存结构,用 ... -
完整的ORACLE的UTL_FILE的资料
2012-10-08 13:58 699转自:http://blog.csdn.net/alex197 ... -
RAID的类别使用(0,1,0+1,5)
2012-10-08 09:02 674raid0: 熟悉RAID 0的人都知道,它的读写速度是最高 ... -
oracle 裸设备使用和注解
2012-09-28 11:37 888看了一篇不错的的关于 ... -
EM无法登陆问题
2012-05-19 22:20 1244解决ORACLE的EM登录 这几 ... -
oracle的冷/热备份
2012-04-29 11:48 680一、 冷备份 冷 ... -
oracle安装、编译、参数配置
2011-06-09 19:23 651一、安装 按照以下标 ... -
Oracle个人笔记(SQL性能)2B
2011-06-09 19:20 6591.两者区别在哪?select trunc(sysdate,' ... -
start with...connect by prior用法
2011-06-09 19:18 615--当需要根据递归关系查询结果集时 start wit ... -
ORA-01157(表空间数据文件损坏需重建时)
2011-06-09 19:08 982EM控制台报错如下: 处理步骤: 1. 备份该数据 ... -
工作积累(表空间、导出方案、触发器)1
2011-06-09 19:01 643--查看表空间、数据文件相关信息 1、查看表空间包含哪些数据 ... -
Oracle个人笔记(系统查询语句)3
2011-06-09 18:55 522查询锁的表的方法:(1 ... -
Oracle个人笔记(SQL性能)2A
2011-06-09 18:54 6331. ...group by (code,name); 性能要 ... -
Oracle个人笔记(基本规则)1
2011-06-09 18:52 6081.GRANT 权限 ON 表名(对象名) TO 用户;2.o ...
相关推荐
答:我们只需要模拟foreach就行了,数组在执行foreach循环的时候,是有一个游标指向当前数组循环到的值, 那如果我们能拿到这个游标,并且操作游标,使游标前进或者后退,那么我们就能不用foreach而实现循环数组 ...
DB2游标及动态SQL,异常处理,sqlcode,sqlstate
图2 游标图例 选择游标图例右键快捷菜单的“创建游标”,在图形中添加游标。创建游标时,游标模式定义了游标位置,共有3种模式:自由、单曲线和多曲线,如图3所示。同一图形中可创建多个游标。 自由模式不...
oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结oracle游标的总结
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或...
Mysql游标(循环操作)
使用游标更新数据库
SQL Server对游标的使用要遵循:声明游标–打开游标–读取数据–关闭游标–删除游标。下面让我们来看看几种常用游标是怎么使用的! 1、只读游标的使用(只能使用next提取数据) --声明一个只读游标 declare cur_stu ...
oracle游标使用大全,详细描述了如何使用游标,创建游标等等
游标的使用 游标的使用 游标的使用 游标的使用 游标的使用 不会可以联系我
什么是游标?游标有什么作用?Oracle游标的类型?Oracle游标的状态有哪些,怎么使用游标属性?如何使用显示游标,?如何遍历循环游标?
常见的oracle存储过程总结,系统地介绍oracle的创建存储过程、变量、游标、数组以及一些常用的字符串函数的适用,非常实用。
游标算法_伪码.pdf
sql server 游标实例sql server 游标实例sql server 游标实例sql server 游标实例
SQL Server 游标用法 , 游标 Demo
Oracle游标的一般使用
详细介绍游标的创建,使用。里面有详细的例子,是见过的所有学习游标和过程最好的接招
海拉传感器游标算法
游标和事物