博客
关于我
Oracle数据库第三课——PL/SQL中的SQL,在PL/SQL中使用DML语句,掌握事务处理
阅读量:798 次
发布时间:2023-04-15

本文共 2175 字,大约阅读时间需要 7 分钟。

PL/SQL DML操作及事务处理技巧

PL/SQL(Procedural Language/SQL)是一种扩展的SQL语言,用于对数据库进行操作。其DML(Data Manipulation Language)语句主要包括插入、更新、删除等操作。掌握这些操作及事务处理是PL/SQL编程的重要基础。

DML操作概述

在PL/SQL中,DML操作主要包括:

  • INSERT:插入新记录
  • UPDATE:更新已有记录
  • DELETE:删除记录
  • SELECT:查询数据

SELECT INTO语法及其应用

在PL/SQL语句块中,可以使用SELECT INTO语法将查询结果赋值给变量。这种方法适用于初始化变量或从数据库获取单行数据。

SELECT INTO语法格式:

select column_name into variable_name from table_name [where condition];

注意事项:

  • 查询结果必须返回单行数据,否则会报错
  • 查询结果可以经过计算后再赋值给变量

示例:查询并赋值员工信息

declare v_name varchar2(10); v_sal number(7);begin select ename, sal*12 into v_name, v_sal from emp where empno=7369; dbms_output.put_line(v_name || '的年薪是:' || v_sal);end;

插入操作(INSERT语句)

INSERT语句用于向数据库表中插入新记录。语法格式为:

insert into table_name (column1, column2, ...) values (value1, value2, ...);

示例:向dept表插入部门信息

declare v_deptno number(2) := 50; v_dname varchar2(14) := 'support'; v_loc varchar2(13) := 'wuhan';begin insert into dept (deptno, dname, loc) values (v_deptno, v_dname, v_loc);end;

更新操作(UPDATE语句)

UPDATE语句用于修改表中的数据。语法格式为:

update table_name set column_name = value [where condition];

示例:修改部门地址

declare v_loc varchar2(13) := 'hubei';begin update dept set loc = v_loc where deptno = 50;end;

删除操作(DELETE语句)

DELETE语句用于从数据库表中删除记录。语法格式为:

delete from table_name [where condition];

示例:删除特定部门的记录

delete from dept where deptno=50;

事务处理

事务的概念

事务是一组SQL语句的执行单元,确保所有操作要么全部成功,要么全部失败。Oracle数据库支持事务的ACID特性:

  • 原子性(Atomicity):所有操作要么全部完成,要么全部回滚
  • 一致性(Consistency):确保数据在事务完成后保持一致状态
  • 隔离性(Isolation):多个事务之间隔离,避免数据干扰
  • 持久性(Durability):确保修改已提交后永久存留

事务的提交与回滚

在PL/SQL中,事务的提交和回滚通过以下命令实现:

  • COMMIT:提交事务,数据持久化
  • ROLLBACK:回滚事务,数据恢复到保存点状态

保存点用于在事务过程中设置可恢复的状态。语法格式为:

savepoint savepoint_name;

事务示例:模拟银行转账

创建users表并插入初始数据:

create table users ( id number, card_no varchar2(20), name varchar2(20), balance number(10));

insert into users values (1, '12345678901234567890', '张三', 5000);insert into users values (2, '98765432109876543210', '李四', 1000);commit;

模拟转账操作:

declare v_amount number(10) := 500;begin -- 开启事务 savepoint sp_begin; update users set balance = balance - v_amount where id=1; update users set balance = balance + v_amount where id=2; -- 提交事务 commit;end;

验证转账结果:

select * from users;

回滚事务并恢复保存点:

rollback to sp_begin;

注意事务提交后保存点会自动删除,无法再回滚。

转载地址:http://ghrfk.baihongyu.com/

你可能感兴趣的文章
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>
Mysql中的 IFNULL 函数的详解
查看>>
mysql中的collate关键字是什么意思?
查看>>
MySql中的concat()相关函数
查看>>
mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
查看>>