一、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 循环语句、异常处理、事务处理!的更多相关文章

  1. SQL循环语句 详解

    SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+ ...

  2. PL/SQL 循环语句

    1.基本 LOOP 循环语句 语法: LOOP 语句序列; END LOOP; 其中,语句序列中需要一个EXIT语句或一个EXIT WHEN语句来中断循环. 实例: DECLARE x ) :; BE ...

  3. SQL 循环语句几种写法

    1.正常循环语句 declare @orderNum varchar(255)create table #ttableName(id int identity(1,1),Orders varchar( ...

  4. SQL 循环语句 while 介绍 实例

    declare @i int begin insert into test (userid) values(@i) end --------------- while 条件 begin 执行操作 en ...

  5. sql 循环语句几种方式

    --第一   declare @orderNum varchar(255) create table #ttableName(id int identity(1,1),Orders varchar(2 ...

  6. sql 循环语句几种方式(变量循环,游标循环,事务)

    --第一   ) ,),Orders )) declare @n int,@rows int --select @rows=count(1) from pe_Orders select @rows = ...

  7. SQL 循环语句

    一.if语句 二.while语句 练习: 三.case when 四.练习 1. 2. 3. 4.

  8. oracle的控制语句if和循环语句loop while for

    pl/sql的控制结构if-then if-then-else if-then-elsif-else 案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10% ...

  9. T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)

    T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b  nvarchar(10) ; 2.赋值: 法1:set @变量名 ...

随机推荐

  1. EXCEL技能 | EXCEL中实现地图快照,截大图、加水印、保存PNG、TIF、HTML文件

    1 应用场景 本文分享笔者使用EXCEL制作地图的体验. 之前网上有人介绍使用小O地图EXCEL插件版能够在EXCEL中标注地图.绘制地图.可视化数据等操作.如下截图.笔者通过实验,其软件保存方式只能 ...

  2. IMPROVING ADVERSARIAL ROBUSTNESS REQUIRES REVISITING MISCLASSIFIED EXAMPLES

    目录 概 主要内容 符号 MART Wang Y, Zou D, Yi J, et al. Improving Adversarial Robustness Requires Revisiting M ...

  3. JDK Httpclient 使用和性能测试

    Httpclient 使用和性能测试 上篇,通过简介和架构图,我们对HttpClient有了初步的了解. 本篇我们展示HttpClient的简单使用,同时为了说明httpclient的使用性能,我们将 ...

  4. Java面向对象笔记 • 【第1章 面向对象】

    全部章节   >>>> 本章目录 1.1 类和对象 1.1.1 类和对象的概念 1.1.2 类的语法结构 1.1.3 对象的创建和使用 1.1.4 对象和引用 1.1.5 实践 ...

  5. linux系统内置函数

    一.action函数 在/etc/init.d/functions中有一个系统自带的函数 source /etc/init.d/functions  #启用系统函数脚本 action "输出 ...

  6. List转换Map的三种方式

    1.for循环 ... 2.使用guava Map<Long, User> maps = Maps.uniqueIndex(userList, new Function<User, ...

  7. Solon 开发,四、Bean 扫描的三种方式

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  8. Sentry 开发者贡献指南 - 测试技巧

    作为 CI 流程的一部分,我们在 Sentry 运行了多种测试. 本节旨在记录一些 sentry 特定的帮助程序, 并提供有关在构建新功能时应考虑包括哪些类型的测试的指南. 获取设置 验收和 pyth ...

  9. Android学习笔记3

    (5)练习做一个实现两个数相乘的APP ①.java代码: //MainActivity.java package com.example.hello; import android.content. ...

  10. prometheus+exporter小测试:

    1.golang中使用expoter import ( "github.com/prometheus/client_golang/prometheus/promhttp" ) fu ...