14.Oracle中的事务

oracle的事务管理

  • 一、什么是事务
  • 二、事务的基本操作
    • 1、事务的开始与结束
    • 2、事务处理的案例
      • 2.1题目1
      • 2.2题目2

一、什么是事务

Oracle 11g是一个关系型数据库管理系统,它提供了强大的事务管理功能,可以确保数据库操作的一致性、可靠性和持久性。事务是数据库中一组操作的逻辑单元,要么全部执行成功,要么全部不执行,不会出现部分执行的情况。

在Oracle 11g中,事务具有以下特点:

  1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部不执行。如果事务中的任何一个操作失败,整个事务将被回滚到之前的状态,保持数据库的一致性。

  2. 一致性(Consistency):事务执行前后,数据库的完整性约束和业务规则都得到了保持,数据库从一个一致的状态转移到另一个一致的状态。

  3. 隔离性(Isolation):事务之间相互独立,互不干扰。即使多个事务同时对同一数据进行操作,也不会相互影响。

  4. 持久性(Durability):一旦事务提交,其结果将永久保存在数据库中,即使系统发生故障也不会丢失。

在Oracle 11g中,可以使用SQL语句来控制事务的提交和回滚,例如使用COMMIT语句提交事务,使用ROLLBACK语句回滚事务。此外,Oracle 11g还提供了事务管理的高级功能,如事务日志、事务恢复和并发控制,以确保数据库的安全性和可靠性。

总之,Oracle 11g的事务管理功能可以帮助用户确保数据库操作的一致性和可靠性,保护数据库的完整性和安全性。

二、事务的基本操作

1、事务的开始与结束

在执行第一条DML SQL 语句时开始
在发生下列事件之一后结束:

1、发出COMMITROLLBACK语句
2、执行DDL或者DCL语句(事务会自动提交),例如执行CREATE操作
3、用户退出当前SESSION
4、系统崩溃(比如说数据库服务器断电、硬件异常造成系统宕机等等)

一个事务处理结束之后,下一个可执行的SQL语句会自动启动下一个事务处理。
DDL与DCL语句是自动提交的,因此会隐式的结束一个事务的处理。

2、事务处理的案例

2.1题目1

create table yggz(code int, salary number(7,2));
insert into yggz values(1, 1000);
insert into yggz values(2, 150);
commit;

完成任务:
如果1号员工的salary多于300元,则从1号员工的salary中减少300元,同时加到2号员工的salary上。

以下是一个简单的PL/SQL程序,用于实现题目中要求的任务:

DECLAREv_salary1 number(7,2);v_salary2 number(7,2);
BEGIN-- 获取1号员工的salarySELECT salary INTO v_salary1 FROM yggz WHERE code = 1 FOR UPDATE;-- 判断1号员工的salary是否多于300元IF v_salary1 > 300 THEN-- 减少1号员工的salaryUPDATE yggz SET salary = salary - 300 WHERE code = 1;-- 获取2号员工的salarySELECT salary INTO v_salary2 FROM yggz WHERE code = 2 FOR UPDATE;-- 增加2号员工的salaryUPDATE yggz SET salary = salary + 300 WHERE code = 2;-- 提交事务COMMIT;DBMS_OUTPUT.PUT_LINE('任务完成');ELSEDBMS_OUTPUT.PUT_LINE('1号员工的salary不多于300元,无法完成任务');END IF;
EXCEPTIONWHEN OTHERS THEN-- 出现异常时回滚事务ROLLBACK;DBMS_OUTPUT.PUT_LINE('任务失败');
END;
/

在上面的PL/SQL程序中,我们首先获取1号员工的salary,并判断是否多于300元。如果是,则减少1号员工的salary并增加2号员工的salary,然后提交事务。如果出现异常,则回滚事务。最后,根据任务的完成情况输出相应的信息。

2.2题目2

create table yggz(code int, salary number(7,2));
insert into yggz values(1, 1000);
insert into yggz values(2, 150);
commit;

完成任务:
如果1号员工的salary多于300元,则从1号员工的salary中减少300元,同时加到2号员工的salary上,但是还要确保转账后的1号员工的salary多于转账后的2号员工的salary。

以下是一个简单的PL/SQL程序,用于实现题目中要求的任务:

DECLAREv_salary1 number(7,2);v_salary2 number(7,2);
BEGIN-- 获取1号员工的salarySELECT salary INTO v_salary1 FROM yggz WHERE code = 1 FOR UPDATE;-- 获取2号员工的salarySELECT salary INTO v_salary2 FROM yggz WHERE code = 2 FOR UPDATE;-- 判断1号员工的salary是否多于300元,且转账后1号员工的salary多于转账后2号员工的salaryIF v_salary1 > 300 AND (v_salary1 - 300) > (v_salary2 + 300) THEN-- 减少1号员工的salaryUPDATE yggz SET salary = salary - 300 WHERE code = 1;-- 增加2号员工的salaryUPDATE yggz SET salary = salary + 300 WHERE code = 2;-- 提交事务COMMIT;DBMS_OUTPUT.PUT_LINE('任务完成');ELSEDBMS_OUTPUT.PUT_LINE('1号员工的salary不多于300元,或者转账后1号员工的salary不多于转账后2号员工的salary,无法完成任务');END IF;
EXCEPTIONWHEN OTHERS THEN-- 出现异常时回滚事务ROLLBACK;DBMS_OUTPUT.PUT_LINE('任务失败');
END;
/

在上面的PL/SQL程序中,我们首先获取1号员工和2号员工的salary,并判断1号员工的salary是否多于300元,且转账后1号员工的salary多于转账后2号员工的salary。如果条件满足,则执行转账操作,并提交事务。如果出现异常,则回滚事务。最后,根据任务的完成情况输出相应的信息。

这个PL/SQL程序实现了题目中要求的逻辑,可以在Oracle数据库中执行以完成任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAVEN——PACKAGE、INSTALL、DEPLOY的联系与区别

我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打jar包或war(当然也可以是其它形式的包)的功能,但这三个命令还是有区别的。下面通过分别执行这三个命令的输出结…

【rust:tauri-app踩坑记录】dangerousRemoteDomainIpcAccess 不适用于IP地址,临时解决方案

找到一个临时解决方案: 修改依赖包的源代码 找到 C:\Users%USER_HOME%.cargo\registry\src\index.crates.io-6f17d22bba15001f\tauri-1.4.1\src\scope\ipc.rs 修改 函数 remote_access_for 将 155 行中的 matches_domain 删除掉,去掉校验 if matches_w…

数据仓库及ETL的理论基础

数据仓库(Data Warehouse)是一个用于存储和管理大量结构化数据的系统,旨在支持企业的决策制定过程。它是一个集成的、主题导向的、时间变化的、非易失性的数据集合,用于支持企业的决策制定过程。数据仓库的设计目标是提供高性能的…

重磅解读 | 阿里云 云网络领域关键技术创新

云布道师 10 月 31 日,杭州云栖大会,阿里云技术主论坛带来了一场关于阿里云主力产品与技术创新的深度解读,阿里云网络产品线负责人祝顺民带来《云智创新,网络随行》的主题发言,针对阿里云飞天洛神云网络(下…

PostgreSQL按月计算每天值的累加

要按月计算每天值的累加,您可以使用PostgreSQL中的日期函数和窗口函数。下面是一个示例查询,假设您有一个名为"table_name"的表,其中包含一个日期列"date_column"和一个数值列"value_column": SELE…

spark内置数据类型

在用scala编写spark的时候,假如我现在需要将我spark读的数据源的字段,做一个类型转换,因 为需求中要拼接出sql的create table语句,需要每个字段的sql中的类型,那么就需要去和sparksql 中的内置数据类型去比对。 写s…

丐版设备互联方案:安卓linux互联局域网投屏,文件共享,共享剪切板

华为,苹果,甚至小米最近也推出了澎湃OS,发现实在是太方便了,当然这些对硬件,系统的要求还是比较高,我用的主力机是小米12pro和ubuntu,win双系统也…

数据库mysql详细教学

目录 mysql的第一组基本操作:数据库操作 1、查看当前数据库 2、创建数据库 3、选中数据库 4、删除数据库 5、表操作 5.1查看数据库中的表 ​编辑 5.2创建表 5.2.1数据类型 5.3 查看指定表的表结构 5.4删除表 5.5 MySQL表的增删改查 5.5.1新增 / 插入数据…

MQTT通信协议使用说明

目录 1 MQTT连接属性1.1 服务器URL(Broker Address)1.2 客户端标识(clientID)1.3 用户名称 & 密码(User Name & Password)1.4 连接超时(Connection Timerout)1.5 心跳间隔 (KeepAlivelnterval)1.6 清除会话(cleanSession) 2 主题&消息2.1 主题2.1.1 订阅主题(SUBSC…

记录一个简单的博客系统该开发过程

文章目录 1.1 设计前端页面1.2 编写数据库相关代码1.3 实现功能的前后端交互 总结 1.1 设计前端页面 首先我们的博客系统要有几个网页界面 博客列表页博客详情页登录页博客编辑页 1.2 编写数据库相关代码 本环节我们需要完成以下几个步骤. 先设计数据库(表设计), 然后编写…

uview-plus中二级菜单左右联动更改为uni-app+vue3+vite写法

uview-plus3.0重磅发布&#xff0c;全面的Vue3移动组件库 该插件使用的vue2写法&#xff0c;但支持vue3引用&#xff0c;在此基础上修改为uni-appvue3vite; <template><view class"u-wrap mainClass"><!-- <back-header :title"pageTitle&quo…

太累了,是时候让AI数字人来帮我干活了(走,上教程)

阿酷TONY&#xff0c;原创文章&#xff0c;长沙&#xff0c;2023.11.21 关 键 词&#xff1a;AI数字人&#xff0c;生成式AI&#xff0c;智能数字分身适用场景&#xff1a;培训数字人&#xff0c;演讲授课数字人&#xff0c;直播带货数字人特别说明&#xff1a;教程用的是国内…

捷诚管理信息系统 SQL注入漏洞复现

0x01 产品简介 捷诚管理信息系统是一款功能全面&#xff0c;可以支持自营、联营到外柜租赁的管理&#xff0c;其自身带工作流管理工具&#xff0c;能够帮助企业有效的开展内部审批工作。 0x02 漏洞概述 捷诚管理信息系统CWSFinanceCommon.asmx接口存在SQL注入漏洞。未经身份认…

【UE】线框材质

一、方式1 新建一个材质&#xff0c;混合模式设置为“已遮罩”&#xff0c;勾选“双面” 勾选“线框” 然后可以随便给一个自发光颜色&#xff0c;这样最基本的线框材质就完成了 二、方式2 新建一个材质&#xff0c;混合模式设置为“已遮罩”&#xff0c;勾选“双面”&#x…

Idear 中签出git项目分支为灰色

--签出git上的项目 git clone git项目地址 --查看目录 $ dir --查看分支 $ git branch -a --签出分支 $ git checkout origin/v1.0 签出后&#xff0c;使用idear打开项目&#xff0c;项目关联git信息

flock使用文件描述符和使用文件的区别

使用带文件描述符的方法可以让你更好地控制和管理 flock 以及与锁相关的行为。当你在子进程或子shell中使用文件描述符时&#xff0c;文件锁可以跨越这些范围&#xff0c;并且只有在你显式地释放它时&#xff0c;锁才会被释放。 让我们看一个例子&#xff0c;更好地理解这一点…

uniapp中swiper 轮播带左右箭头,点击切换轮播效果demo(整理)

可以点击箭头左右切换-进行轮播 <template><view class"swiper-container"><swiper class"swiper" :current"currentIndex" :autoplay"true" interval"9000" circular indicator-dotschange"handleSw…

IPKISS Tutorials ------查看使用 _generate_elements 方法创建图形的端点坐标

IPKISS Tutorials ------查看使用 _generate_elements 方法创建图形的端点坐标 正文正文 import si_fab.all as pdk import ipkiss3.all as i3class Box(i3.PCell):class Layout(i3.LayoutView

深入了解 Bat 脚本:简单而强大的自动化工具——进阶版

&#x1f3eb;博客主页&#xff1a;魔王-T &#x1f3ef;系列专栏&#xff1a;自动化脚本工具 &#x1f95d;大鹏一日同风起 扶摇直上九万里 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前一篇文章【深入了解 Bat 脚本&#xff1a;简单而强大的自动化工具——基础版】介绍…

Atcoder ABC158

C - Tax Increase 范围足够小&#xff0c;遍历100/0.08内的整数就好 D - String Formation 设置两个数组分别代表前后加入的字符&#xff0c;reverse时交换数组 # -*- coding: utf-8 -*- # time : 2023/6/2 13:30 # file : atcoder.py # software : PyCharmimport bi…