Oracle PL/SQL高级应用 游标
游标可以处理SQL语句查询出来的结果集,进行逐条控制,其实游标在内存中申请空间,将自己指向SQL语句查询出来的结果集,有点像指针的感觉,游标使SQL更加的灵活。
DECLARE
CURSOR mycur IS --申请内存
SELECT * FROM books; --查出结果集 要实现对结果逐条处理
myrecord books%ROWTYPE; --准备变量 用于游标取出的数据的存储 因为取出表中所有的字段采取%ROWTYPE记 录的方式
BEGIN
OPEAN mycur; --打开游标结果集
FETCH mycur INTO myrecord; --将结果集存在变量中 取得是SELECT语句结果集的第一条
WHILE mycur%FOUND LOOP --如果游标中有数据则执行循环 在LOOP前必须先有FETCH语句 才能判断是否有据
DBMS_OUTPUT.PUT_LINE(myrecord.books_id||','||myrecord.books_name); --输出字段 ||为连接字符串的 像是'+' 也可以连接不同类型的变量
FETCH mycur INTO myrecord;
END LOOP;
CLOSE mycur;
END;
/
游标属性:
%FOUND 表示游标里是否有数据可取布尔类型判断 之前没有FETCH语句之前 bool值为空
%ISOPEN 当游标打开时为true
%ROWCOUNT 表示已经从游标中取出的数据的个数
带参数的游标的写法:
DECLARE
CURSOR cur_para(id varchar2) IS --参数不需要添加长度 不用写varchar2(10)
SELECT book_name FROM books WHERE book_id=id;
t_name books.book_name%TYPE; --定义变量t_name指定t_name为books.book_name类型和长度
BEGIN
OPEAN cur_para(''); --传进参数0001
LOOP
FETCH cur_para INTO t_name;
EXIT WHEN cur_para%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(t_name);
END LOOP;
END;
/
DECLARE
t_name varchar2();
CURSOR mycur IS
SELECT name FROM deptment;
BEGIN
OPEN mysur;
LOOP
FETCH mycur INTO t_name;
EXIT WHEN mycur%NOTFOUND OR mycur%NOTFOUND IS NULL;
DBMS_OUTPUT.PUT_LINE('游标mycur ROWCOUNT:'||mycur%ROWCOUNT);
END LOOP;
CLOSE mycur;
END;
/
利用游标修改数据:
在用游标修改表时 如修改student表 必须是SELECT * FROM student FOR UPDATE;FOR UPDATE 相当于解开修改数据的小锁头。
DECLARE
CURSOR cur IS
SELECT name FROM deptment FOR UPDATE;
text varchar2(10);
BEGIN
OPEN cur;
FETCH cur INTO text; --将游标中的数据取出放入text
WHILE cur%FOUND LOOP
UPDATE deptment SET name=name||'_t' WHERE CURRENT OF cur; --判断游标当前行 修改当前行数据
FETCH cur INTO text;
END LOOP;
CLOSE cur;
END;
/
隐式游标:
没有游标的声明,打开,关闭的语句
BEGIN
FOR cur IN(SELECT name FROM deptmenet) LOOP
DBMS_OUTPUT.PUT_LINE(cur.name);
END LOOP;
END;
/
注意:
当数据库中数据量较大时,不适合使用游标,因为一条一条的取,效率比较多的低。
Oracle PL/SQL高级应用 游标的更多相关文章
- oracle PL/SQL高级特性
触发器:存放在数据库中,并被隐含执行的存储过程. 由触发事件,触发条件,触发操作组成. DML触发器:指定触发器时机(before or after),触发事件(insert , delete, u ...
- Oracle PL/SQL 高级编程
1. 复合数据类型--记录类型 Ø 语法格式 type 类型名 is record ( 字段1 字段1类型 [not null]:=表达式1; 字段2 字段2类型 [not n ...
- Oracle PL/SQL高级应用 存储过程
有名字的Plsql块,成为Oracle的对象,在以后用到时可以直接调用. CREATE OR REPLACE PROCEDURE myproc(id IN varchar2) IS -IN 为输入参数 ...
- Oracle.PL/SQL高级
一.匿名块 .使用returning ... INTO 保存增删改表数据时的一些列的值 ()增加数据时保存数据 DECLARE v_ename emp.ename%TYPE; v_sal emp.sa ...
- Oracle PL/SQL高级应用 视图 同义词 序列
视图: 视图叫虚表,即是在哪个表上建立的视图,将那个表的数据用一条查询sql语句查出的数据展现在该视图中,对这个视图操作就是只能对该视图中的数据进行操作,该操作也会保存在建立的表中.可以理解为表上表, ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- oracle学习笔记(十七) PL/SQL高级应用
PL/SQL高级应用 动态SQL 在PL/SQL中,不能直接执行DDL(create,alter,drop),得使用动态SQL,当然,除了DDL,动态SQL也可以执行DML(select,insert ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
- [推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)
原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下 ...
随机推荐
- 静态工具类中使用注解注入service
转载:http://blog.csdn.net/p793049488/article/details/37819121 一般需要在一个工具类中使用@Autowired 注解注入一个service.但是 ...
- async 和await
这个是.NET 4.5的特性,所以要求最低.NET版本为4.5. 看很多朋友还是使用的Thread来使用异步多线程操作,基本上看不见有使用Async.Await进行异步编程的.各有所爱吧,其实都可以. ...
- Linux查看程序端口占用情况【转】
今天发现服务器上Tomcat 8080端口起不来,老提示端口已经被占用. 使用命令: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat ...
- Future 模式介绍
假设一个任务执行需要花费一些时间,为了省去不必要的等待时间,可以先获取一个提货单,即future,然后继续处理别的任务,知道货物到达,即任务完成得到结果,此时可以使用提货单提货,即通过future得到 ...
- 基于Storm的工程中使用log4j
最近使用Storm开发,发现log4j死活打不出debug级别的日志,网上搜到的关于log4j配置的方法都试过了,均无效. 最终发现问题是这样的:最新的storm使用的日志系统已经从log4j切换到了 ...
- Tomcat6.0总是运行不了 总是出现Unable to open the service 'Tomcat6'
如果配置没有问题的话,如果你是win7系统,在开始菜单运行Tomcat,运行提示"Unable to open the service ‘tomcat6’"的话,应该是win7的安 ...
- 获取css style值
var obj=document.getElementById("btn");var currentStyle=null;if(obj.currentStyle){ current ...
- 蓝桥杯 algo——6 安慰奶牛 (最小生成树)
问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计 划除去P条道路中尽可能多的道路 ...
- Ubuntu根目录下各文件的功能介绍
http://jingyan.baidu.com/article/afd8f4de55189c34e286e9e6.html
- linux命令每日一练习-pwd,cd
pwd显示当前路径. pwd -P没能明白什么意思, cd 进入目录 cd ..返回上级目录