ql/sql 循环语句、异常处理、事务处理!
一、ql sql 循环语句?
/*1.loop循环
语法:
声明循环变量
loop
判断循环条件 ,如果循环条件不成立,跳出循if 条件表达式 then
exit;
end if;
语句块;
改变循环变量的值
end loop;
举例:输出1到100以内的自然
*/
declare
--声明循环变量
v_i number(8):=1;
begin
loop
if v_i>100 then-- 判断循环条件,条件成立,跳出循环
exit;
end if;
dbms_output.put_line('输出数字:'||v_i);-- 输出1到100以内的自然数
v_i:=v_i+1; -- 改变循环变量的值
end loop;
end;
--需求:输出部门表的所有内容?
--into只能用一个或者一行的方式赋值,我们可以用bulk collect into来给行类型变量整体赋值,也就是说可以一次性
--把所有数据查询出来,为table类型的变量赋值。
declare
-- 声明table类型
type dept_table_type is table of dept%rowtype
index by binary_integer;
-- 声明table类型的变量,用来存储部门表的所有数据
v_dept dept_table_type;
-- 声明循环变量
v_i number(8):=1;
begin
-- 查询所有部门表的内容,放到v_dept变量中
select * bulk collect into v_dept from dept;
loop
if v_i>v_dept.count then --设置条件 结束循环
exit;
end if;
dbms_output.put_line(
'部门编号'||v_dept(v_i).deptno||' 部门名称'||v_dept(v_i).dname||' 部门位置'||v_dept(v_i).loc
);
v_i:=v_i+1; --改变循环变量的值
end loop;
end;
/**2.while循环
语法:
声明循环变量,给循环变量赋初始值
while 条件表达式
loop
语句块;
改变循环变量的值
end loop;
举例:输出1到100以内的自然
*/
declare
v_i number(6):=1;-- 声明循环变量
begin
while v_i<101--如果条件成立,执行循环
loop
dbms_output.put_line(v_i);
v_i:=v_i+1;-- 改变循环变量的值
end loop;
end;
/**3.for 循环
语法:
for 循环变量 in 循环变量的开始值..循环变量的结束值
loop
语句块;
end loop;
注意:for循环,循环变量可以直接使用,不用声明。in 包含循环变量的开始值和结束值
*/
--举例:输出1到100以内的自然
begin
for v_i in 1..100 -- 循环变量不用声明 真爽!
loop
dbms_output.put_line(v_i);
end loop;
end;
二、异常处理
/**二、异常处理
直接让用户看到程序的信息是不好的,最好以友好的方式输出出来。
*/
--1.内置异常 举例:根据员工编号查询员工姓 declare
--声明员工姓名的变量
v_ename emp.ename%type;
v_num number(5); begin
v_num:=56565;
v_num:=465465465;
select ename into v_ename from emp;
dbms_output.put_line('员工姓名:'||v_ename); exception
-- 当异常发生的时候做什么处理
when no_data_found then
dbms_output.put_line('没有找到该员工编号'); --除数为0的异常
when zero_divide then
dbms_output.put_line('除数不能为0');
when too_many_rows then
dbms_output.put_line('返回行数过多');
when others then
dbms_output.put_line('出现了其他异常'); end; /**2.自定义异常
语法:
declare
--声明异常变量
变量名称 exception;
begin
--抛出异常
raise 变量名称;
exception
-- 处理异常
when 变量名称 then
业务处理
end;
*/
--举例:根据员工编号删除员工信息,如果删除的员工不存在,抛出异常,在控制台打印没有删除成功 declare
-- 声明异常变量
v_myex exception; begin
-- 根据员工编号删除员工
delete from emp where empno=&no;
-- 暂时要用到隐含游标
if sql%notfound then
--抛异常
raise v_myex;
end if;
-- 处理异常
exception
when v_myex then
dbms_output.put_line('要删除的员工不存在'); end;
三、事物处理
/**三、事物处理
事物的acid特性 and 事物的死锁
*/ --1.原子性 数据库增删改操作,要么全部成功,要么全部失败。 /*2.一致性
对于数据库的操作必须符合业务逻辑。
张三给李四转1000元,不能出现张三的钱少了1000 李四就收到800*/ /**3.隔离性
多个数据库操作之间不能产生干扰
张三给李四转1000元,不能出现张三的钱少了1000,结果另外一个人王五的钱多了1000.
*/ /**4.持久性
数据库的操作应该是永久持久化到物理介质(硬盘)上
张三给李四转1000元,不能出现今天张三的钱少了1000. 李四的增加了1000.过了一天张三的钱又回了。
*/ /**5.pl/sql中事物的操作方式
在pl/sql中,可以定义事物的回顾点,可以回顾事物,也可以定义回滚点
savepoint 回滚点名称; 回滚事物
rollback to 回滚点名称; 提交事物
commit; 举例:往部门表中插入多条数据
*/
select * from dept;
begin
-- 定义事物回滚点
savepoint a;
insert into dept values(1,'技术部','郑州');
insert into dept values(2,'公关部','郑州'); -- 回滚事物
rollback to a;
insert into dept values(12,'小卖部','郑州'); -- 提交事物
commit; end; /**6.事物的死锁
数据库中事物如果使用不当,有可能会出现死锁的问题。
爸爸对儿子说,你给我成绩单,我就给你玩具。
儿子对爸爸说,你给我玩具,我就给你成绩单。 7.oracle中锁的概念
oracle中使用锁的机制来实现事物。oracle中分两种常见的锁 排他锁,共享锁。
增删改数据库记录的时候,就会在
操作记录的行上加上排他锁。查询的时候会在查询的记录上加上共享锁。
*/ select * from dept;
insert into dept values(21,'技术部','郑州');
insert into dept values(22,'公关部','郑州'); --模拟两个事物都对 数据库中的部门表1和2 的数据进行更新
update dept set dname='技术部' where deptno=1;
update dept set dname='公关部' where deptno=2;
ql/sql 循环语句、异常处理、事务处理!的更多相关文章
- SQL循环语句 详解
SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+ ...
- PL/SQL 循环语句
1.基本 LOOP 循环语句 语法: LOOP 语句序列; END LOOP; 其中,语句序列中需要一个EXIT语句或一个EXIT WHEN语句来中断循环. 实例: DECLARE x ) :; BE ...
- SQL 循环语句几种写法
1.正常循环语句 declare @orderNum varchar(255)create table #ttableName(id int identity(1,1),Orders varchar( ...
- SQL 循环语句 while 介绍 实例
declare @i int begin insert into test (userid) values(@i) end --------------- while 条件 begin 执行操作 en ...
- sql 循环语句几种方式
--第一 declare @orderNum varchar(255) create table #ttableName(id int identity(1,1),Orders varchar(2 ...
- sql 循环语句几种方式(变量循环,游标循环,事务)
--第一 ) ,),Orders )) declare @n int,@rows int --select @rows=count(1) from pe_Orders select @rows = ...
- SQL 循环语句
一.if语句 二.while语句 练习: 三.case when 四.练习 1. 2. 3. 4.
- oracle的控制语句if和循环语句loop while for
pl/sql的控制结构if-then if-then-else if-then-elsif-else 案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10% ...
- T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)
T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b nvarchar(10) ; 2.赋值: 法1:set @变量名 ...
随机推荐
- 【剑指Offer】顺时针打印矩阵 解题报告(Python)
[剑指Offer]顺时针打印矩阵 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片
大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 @ 目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...
- 论文翻译:2020_ACOUSTIC ECHO CANCELLATION WITH THE DUAL-SIGNAL TRANSFORMATION LSTM NETWORK
论文地址:https://ieeexplore.ieee.org/abstract/document/9413510 基于双信号变换LSTM网络的回声消除 摘要 本文将双信号变换LSTM网络(DTLN ...
- AES对称加密算法实现:Java,C#,Golang,Python
高级加密标准(Advanced Encryption Standard,简写AES),是一种用来替代DES的对称加密算法,相比DES,AES安全性更高,加密速度更快,因此被广泛使用. 理论上看,AES ...
- Flask_环境部署(十六)
flask自带的服务器,无法满足性能要求,我们这里采用Gunicorn做wsgi容器,来部署flask程序并使用 Nginx 做前端代理实现分流.转发.负载均衡,以及分担服务器的压力. Gunicor ...
- 您应该知道的35个绝对重要的Linux命令
https://mp.weixin.qq.com/s?__biz=MzU3NTgyODQ1Nw==&mid=2247499293&idx=2&sn=1353b78d6ad01d ...
- centos7-collabora-office(在线文档编辑)
1.wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key &a ...
- PowerShell 之常用方法
随笔分类 - 常用 [PowerShell]文件的解压与压缩 摘要:1 New-Item -ItemType File 1.txt -Force #新建文本文件 2 Compress-Archive ...
- Linux上天之路系列目录
Linux上天之路系列目录 Linux上天之路(一)之Linux前世今生 Linux上天之路(二)之Linux安装 Linux上天之路(三)之Linux系统目录 Linux上天之路(四)之Linux界 ...
- GoWeb之gin框架
Gin 是一个 go 写的 web 框架,具有高性能的优点.官方地址:https://github.com/gin-gonic/gin 一.快速上手 安装 go mod init go get -u ...