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 @变量名 ...
随机推荐
- 【LeetCode】357. Count Numbers with Unique Digits 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Labeling Balls(poj3687)
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13109 Accepted: 3782 D ...
- [数据结构]严蔚敏版(C数据结构)配套实现程序111例
以下为根据严蔚敏版数据结构的示例和概念实现的程序 目录 一.严蔚敏版(C数据结构)配套实现程序111例 1.数组与字符串 2.栈与队列 3.链表LinkList 4.树与二叉树 5.排序相关算法 6. ...
- Spring企业级程序设计作业目录(作业笔记)
Spring企业级程序设计 • [目录] 第1章 Spring之旅 >>> 1.1.6 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打 ...
- Java程序设计基础笔记 • 【第1章 初识Java】
全部章节 >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...
- Java程序设计基础笔记 • 【第3章 运算符与表达式】
全部章节 >>>> 本章目录 3.1 运算符(一) 3.1.1 赋值运算符 3.1.2 算数运算符 3.1.3 复合运算符 3.1.4 实践练习(一) 3.1.5 实践练习 ...
- 【计项02组01号】Java版图形界面计算器
Java版图形界面计算器1.0版本 项目分析[1.0] 组成部分 代码结构 (1)窗口的创建 在<JDK 核心 API>中我们提到,创建一个窗口需要使用 JFrame 类.在本实验中,我们 ...
- 初识python 之 取101到200之前的所有素数
素数:只能被1或本身整除 思路分析:这个数只有2个数据能整除 代码如下: n = 0 li = [] for i in range(101,200): m = 0 for j in range(1,2 ...
- minio实现文件上传下载和删除功能
https://blog.csdn.net/tc979907461/article/details/106673570?utm_medium=distribute.pc_relevant_t0.non ...
- 微信小程序css继承
在微信小程序里写的全局样式,pages里的组件是可以继承的,但是components里只能继承font和color属性.