PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务
A. IF条件分支语法:
if (条件1) then
语句;
elsif (条件2) then
语句;
elsif (条件3) then
语句;
else
语句;
end if;
B . case条件分支:等值比较、条件比较、case表达式
a.等值比较语法:
CASE 条件判断
WHEN 条件值的表达式 THEN 要执行的条件操作 ;
…….
[ELSE ……..]
END CASE;
b. 条件比较语法:
CASE
WHEN 不同比较条件 THEN 要执行的条件操作 ;
…….
[ELSE ……..]
END CASE;
2. 循环控制
A. 基本循环:无论是否满足条件,语句至少执行一次
语法:LOOP
……..
EXIT [WHEN 条件语句];
END LOOP;
B. WHILE循环:只有条件为真时,才会执行
语法: WHILE 条件语句 LOOP
…………………………………..
END LOOP;
C. FOR循环
语法: FOR 循环计数器 IN [REVERSE] 下限.. 上限 LOOP
……………………………………………………………………………………
END LOOP;
D. 嵌套循环和标号:定义标号:<< 标号名称 >>
3. 顺序控制
缺点是会增加程序的复杂性,降低可读性,所以Oracle建议昼不要使用。
B. NULL语句:空语句,执行没有任何实际效果,通常占位置用
4. 异常处理
A.异常有两种类型:
a. 预定义异常 : 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发
b. 用户定义异常 : 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发
B. 定义异常语法:异常名称 EXCEPTION;
PRAGMA EXCEPTION_INIT(异常名称, 错误号);
C. 抛出异常语法
a. RAISE 异常名称;
b. RAISE_APPLICATION_ERROR(错误号 , 错误描述 [, {TRUE|FALSE}]);
D. 处理异常语法
EXCEPTION
WHEN ……. THEN
…………….
WHEN THEN
WHEN OTHERS THEN
………….
5. DML操作的游标属性
A. 隐式游标
a. 名称:SQL
b. 属性:SQL%属性名
c. 常见属性
SQL%FOUND:操作到数据
SQL%NOTFOUND:没有操作到数据
SQL%ROWCOUNT:操作的记录数
B. DML语句的RETURNING字句:返回SQL执行以后的结果
6. 用ForAll语句批量执行DML
A. ForAll语句语法
ForAll 索引 in 开始..结束
sql语句; --注意,只有一句!
B . 在INSERT语句上使用批量绑定:首先要给集合元素赋值,然后再使用ForAll语句批量绑定
C. ForAll的游标属性
a. SQL%FOUND:操作到数据
b. SQL%NOTFOUND:没有操作到数据
c. SQL%ROWCOUNT:操作的记录数
d. SQL%BULK_ROWCOUNT:返回批量执行时第i个元素所作用的行数
7. PL/SQL中的数据库事务管理
A. 事务概念:事务就是一个完整的逻辑工作单元,由多个操作组成。所有操作要么全部成功,要么全部失败
B. 事务特点: ACID:原子性、一致性、隔离性、(永)持久性
C. 事务控制流程
开始事务
自动执行第一条SQL开始
执行SQL
可能执行多条SQL
提交或回滚
commit或rollback
D. 锁的概念:锁是数据库用来控制共享资源并发访问的机制、锁用于保护正在被修改的数据、直到提交或回滚了事务之后,其他用户才可以更新数据
E. 锁的类型:行级锁、表级锁
a.行级锁:对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行
在使用以下语句时,Oracle会自动应用行级锁:
a. INSERT
b. UPDATE
c. DELETE
d. SELECT … FOR UPDATE
使用COMMIT或ROLLBACK语句释放锁
b. 表级锁:锁定整个表,限制其他用户对表的访问
语法: LOCK TABLE table_name IN mode MODE;
F. 死锁:当两个事务相互等待对方释放资源时,就会形成死锁、Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁
8. 事务隔离级别
A. 分类
a. 未提交读
读其它用户没有提交的数据,又称脏读
b.提交读:Oracle支持,这也是默认支持的级别(可能会发生不可重复读数据异常)
c.可重复读: Oracle不支持(可能会发生幻读数据异常)
d.串行读: Oracle支持,不过效率低
9. 数据库事务实现机制:通过日志文件实现
PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务的更多相关文章
- 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作
http://www.cnblogs.com/wgp13x/p/4934521.html 内容一样,样式好的版本. 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据 ...
- sql语句 怎么从一张表中查询数据插入到另一张表中?
sql语句 怎么从一张表中查询数据插入到另一张表中? ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...
- 程序一 用记事本建立文件src.dat,其中存放若干字符。编写程序,从文件src.dat中读取数据,统计其中的大写字母、小写字母、数字、其它字符的个数,并将这些数据写入到文件test.dat中。
用记事本建立文件src.dat,其中存放若干字符.编写程序,从文件src.dat中读取数据,统计其中的大写字母.小写字母.数字.其它字符的个数,并将这些数据写入到文件test.dat中. #inclu ...
- sql存储过程通过ID删除两表中的数据。
CREATE OR REPLACE PROCEDURE del_p --建立名为del_p 的过程 IS CURSOR get_abid --简历名为get_abid的cursor 用来存放a表的id ...
- Oracle数据库之PL/SQL程序设计基础
PL/SQL程序设计基础 一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ ...
- JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务
JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...
- 二十五、oracle pl/sql进阶--控制结构(分支,循环,控制)
一.pl/sql的进阶--控制结构在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...),在pl/sql中也存在这样的控制结构.在本部分学习完成后,希 ...
随机推荐
- 【转载】文件上传命令rz和下载命令sz的安装
一.xshell工具简介 Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议.其可以在Windows界面下用来访 ...
- adb 命令实用
1.adb安装:adbinstall.bat:原理:将apk文件拖进此bat,install命令会强制(覆盖)安装apk安装包.代码如下: @echo on adb install -r % paus ...
- 小程序button默认样式透彻理解
微信小程序有一个默认样式,特别是有一个外边框,虽然看起来不别扭,但是自己每次设置border:0:都不生效,写成内联的样式也不生效,后来才知道里面的边框是伪元素的边框,这里的伪元素可以理解为用css动 ...
- NOIP 2008 传纸条(洛谷P1006,动态规划递推,滚动数组)
题目链接:P1006 传纸条 PS:伤心,又想不出来,看了大神的题解 AC代码: #include<bits/stdc++.h> #define ll long long using na ...
- css--小白入门篇3
一.上篇知识复习 css属性,面试的时候会有笔试,笔试没有智能感应的: ● 加粗,倾斜,下划线: 1 font-weight:bold; 2 font-style:italic; 3 text-dec ...
- UVA - 12589 Learning Vector(dp-01背包)
题目: 思路: dp[j][h]表示选取了j个向量,且高度为h,利用01背包来解决问题. 没选当前的向量:dp[j][h] = dp[j][h]; 选了当前的向量:dp[j][h] = dp[j-1] ...
- centos7修改时间和时区
设置时区同样, 在 CentOS 7 中, 引入了一个叫 timedatectl 的设置设置程序. 用法很简单: # timedatectl # 查看系统时间方面的各种状态 Local time: 四 ...
- 窥探原理:实现一个简单的前端代码打包器 Roid
roid roid 是一个极其简单的打包软件,使用 node.js 开发而成,看完本文,你可以实现一个非常简单的,但是又有实际用途的前端代码打包工具. 如果不想看教程,直接看代码的(全部注释):点击地 ...
- Spring 工厂方法创建Bean 学习(三)
1, 静态工厂方法创建Bean 调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节. 要声明通过静态方法创建 ...
- [置顶]
Linux学习总结(20)——Linux 文件夹结构和作用
/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/us ...