Oracle pl/sql 显示游标和隐式游标
显示游标
一、定义语法:
CURSOR <游标名> IS
<SELECT 语句>
[FOR UPDATE | FOR UPDATE OF 字段];
[FOR UPDATE | FOR UPDATE OF 字段] --给游标加锁,既是在程序中有"UPDATE","INSERT","DELETE"语句对数据库操作时。游标自动给指定的表或者字段加锁,防止同时有别的程序对指定的表或字段进行"UPDATE","INSERT","DELETE"操作。在使用"DELETE","UPDATE"后还可以在程序中使用CURRENT OF <游标名> 子句引用当前行。
操作:
OPEN <游标名> --打开游标
FETCH <游标名> INTO 变量1,变量2,变量3,....变量n,; --获取某些字段值
或者
FETCH <游标名> INTO 行对象; --取出游标当前位置的值
CLOSE <游标名> --关闭游标
显示游标属性:
%NOTFOUND --如果FETCH语句失败,则该属性为"TRUE",否则为"FALSE";
%FOUND --如果FETCH语句成果,则该属性为"TRUE",否则为"FALSE";
%ROWCOUNT --返回游标当前行的行数;
%ISOPEN --如果游标是开的则返回"TRUE",否则为"FALSE";
二、使用:
2.1 LOOP循环
DECLARE
cursor c_1 is select * from emp; --定义游标
r c_1%rowtype; --定义一个行对象,用于获得游标的值
BEGIN
if c_1%isopen then
CLOSE c_1;
end if;
OPEN c_1; --判断游标是否打开.如果开了将其关闭,然后在打开
dbms_output.put_line('行号 姓名 薪水');
LOOP
FETCH c_1 INTO r; --取值
EXIT WHEN c_1%NOTFOUND; --如果游标没有取到值,退出循环.
dbms_output.put_line(c_1%rowcount||' '||r.ename||' '||r.sal); --输出结果,需要 set serverout on 才能显示.
END LOOP;
END;
2.2 FOR循环
DECLARE
cursor c_1 is select ename,sal from emp; --定义游标
BEGIN
dbms_output.put_line('行号 姓名 薪水');
FOR i IN c_1 --for循环中的循环变量i为c_1%rowtype类型;
LOOP
dbms_output.put_line(c_1%rowcount||' '||i.ename||' '||i.sal); --输出结果,需要 set serverout on 才能显示.
END LOOP;
END;
for循环使用游标是在循环开始前自动打开游标,并且自动取值到循环结束后,自动关闭游标.
三、游标加锁示例:
3.1 不带参数的游标
定义:CURSOR <游标名>IS <SELECT 语句> [FOR UPDATE | FOR UPDATE OF 字段];
DECLARE
cursor c_1 is select ename,sal from emp for update of sal; --定义游标对emp表的sal字段加锁.
BEGIN
dbms_output.put_line('行号 姓名 薪水');
FOR i IN c_1 --for循环中的循环变量i为c_1%rowtype类型;
LOOP
UPDATE EMP WHERE CURRENT OF c_1; --表示对当前行的sal进行跟新.
END LOOP;
FOR i IN c_1
LOOP
dbms_output.put_line(c_1%rowcount||' '||i.ename||' '||i.sal); --输出结果,需要 set serverout on 才能显示.
END LOOP;
END;
3.2 带参数的游标
定义:CURSOR <游标名>(参数列表) IS <SELECT 语句> [FOR UPDATE | FOR UPDATE OF 字段];
DECLARE
cursor c_1(name emp.ename%type) is select ename,sal from emp where ename=name; --定义游标
BEGIN
dbms_output.put_line('行号 姓名 薪水');
FOR i IN c_1('&name') --for循环中的循环变量i为c_1%rowtype类型;
LOOP
dbms_output.put_line(c_1%rowcount||' '||i.ename||' '||i.sal); --输出结果,需要 set serverout on 才能显示.
END LOOP;
END;
隐试游标
隐试游标游标是系统自动生成的。每执行一个DML语句就会产生一个隐试游标,起名字为SQL;隐试游标不能进行"OPEN" ,"CLOSE","FETCH"这些操作;
隐式游标属性:
%NOTFOUND --如果DML语句没有影响到任何一行时,则该属性为"TRUE",否则为"FALSE";
%FOUND --如果DML语句影响到一行或一行以上时,则该属性为"TRUE",否则为"FALSE";
%ROWCOUNT --返回游标当最后一行的行数;
个人认为隐试游标的作用是判断一个DML语句;
BEGIN
delete from emp where empno=&a;
if sql%notfound then
dbms_output.put_line('empno不存在');
end if;
then
dbms_output.put_line('删除成功');
end if;
END;
Oracle pl/sql 显示游标和隐式游标的更多相关文章
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- ORACLE的显式游标与隐式游标
1)查询返回单行记录时→隐式游标: 2)查询返回多行记录并逐行进行处理时→显式游标 显式游标例子: DECLARE CURSOR CUR_EMP IS SELECT * FROM EMP; ROW_E ...
- PL/SQL — 隐式游标
一.隐式游标的定义及其属性 定义 隐式游标由系统自动定义,非显示定义游标的DML语句即被赋予隐式游标属性.其过程由oracle控制,完全自动化.隐式游标的名称是SQL,不能对SQL游标显式地执行OPE ...
- PL/SQL -->隐式游标(SQL%FOUND)
PL/SQL -->隐式游标(SQL%FOUND) 分类: SQL/PLSQL 基础2010-12-22 16:23 4084人阅读 评论(0) 收藏 举报 sqlexceptionoracle ...
- oracle PL/SQL(procedure language/SQL)程序设计之游标cursors
游标 Cursors--Conception 每一条被Oracle服务器执行的SQL语句都有一个独立的游标与之相关联:隐式游标 Implicit cursors: 用于所有的DML和PL/SQL的SE ...
- Oracle PL/SQL 游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL ...
- Oracle PL/SQL游标
游标的提出: SQL是面向集合的,其结果一般是集合量(多条记录),而PL/SQL的变量一本是标量,其一组变量异常一直只能存放一条记录.所以仅仅使用变量并不能完全满足SQL语句向应用程序输出数据的要求. ...
- oracle的隐式游标
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...
随机推荐
- 按键(ESC ,F1,F2等)——wpf的命令处理方法
WPF窗体的命令绑定 方法一:使用代码 <WpfUI:View.CommandBindings> <CommandBinding Command="Help" ...
- QBXT Day 4 数学,数论
今天讲一讲数论吧(虽然清明讲过了) 进制转换 我们来看10这个数怎么转换成k进制 因为10=2^3+2^1,所以10就是1010 三进制也同理10=3^2+3^0,所以就是101 我们对于一个10进制 ...
- selenium定位多个嵌套iframe
一. driver.switch_to.frame(id):可以通过id切换到iframe 之前学习了selenium切换到iframe的方法,代码如下 from selenium import we ...
- 持续集成平台jenkins
一. 什么是持续集成 1. 概念 持续集成(Continuous Integration),也就是我们经常说的CI 持续集成(CI)是一种实践,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发 ...
- substr 方法
substr 方法 返回一个从指定位置开始,并具有指定长度的子字符串. 参数 start 必选.所需的子字符串的起始位置.字符串中第一个字符的索引为 0. length 可选项.返回的子字符串中包含的 ...
- 51 nod 1091 贪心
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091 1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 ...
- filter()和sort()这两个方法一块学习,案例中。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- hive_学习_00_资源帖
一.官方资料 二.参考资料
- nginx location配置与rewrite配置
注:原文出处 www.linuxidc.com/Linux/2015-06/119398.htm 1. location正则写法 一个示例: location =/{ # 精确匹配 / ,主机名后面不 ...
- Qt之事件处理机制
思维导读 一.事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下 ...