- 从入门到精通Oracle-学习大纲
- Oracle简介
- Oracle数据库安装与配置详
- Oracle数据库基本SQL语句
- Oracle数据库中的数据定义语言(DDL)
- Oracle数据库中的数据操作语言(DML)
- Oracle PL/SQL编程
- Oracle数据库性能优化
- Oracle并发控制详解:事务隔离级别、锁机制与MVCC
- Oracle分区管理详解:概念、类型、创建与性能优化
- Oracle日志管理详解:Redo Log与Archive Log的配置与应用
- Oracle慢查询日志分析与优化实战指南
- Oracle索引优化
Oracle数据库中的数据操作语言(DML)
class DML,ORACLE数据操作语言(DML)是SQL的一个重要组成部分,用于操作数据库中的数据。Oracle数据库提供了丰富的DML功能,包括插入、更新、删除数据,以及事务管理和游标的使用。本文将深入探讨Oracle中的DML,涵盖事务管理的提交与回滚,以及如何使用游标处理数据。
一、数据操作语言(DML)概述
DML主要包括以下操作:
- 插入数据(INSERT)
- 更新数据(UPDATE)
- 删除数据(DELETE)
- 查询数据(SELECT)
1. 插入数据(INSERT)
INSERT语句用于向表中添加新记录。基本语法如下:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
示例
-- 向employees表插入新员工记录
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (101, 'John', 'Doe', TO_DATE('2023-01-15', 'YYYY-MM-DD'), 60000);
2. 更新数据(UPDATE)
UPDATE语句用于修改已存在的记录。基本语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
示例
-- 更新员工的薪水
UPDATE employees
SET salary = salary * 1.10
WHERE employee_id = 101;
3. 删除数据(DELETE)
DELETE语句用于删除表中的记录。基本语法如下:
DELETE FROM table_name
WHERE condition;
示例
-- 删除一名员工记录
DELETE FROM employees
WHERE employee_id = 101;
4. 查询数据(SELECT)
SELECT语句用于从数据库中检索数据。基本语法如下:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
示例
-- 查询所有员工的姓名和薪水
SELECT first_name, last_name, salary
FROM employees;
二、事务管理
事务是一个逻辑工作单位,由一系列操作组成,要么全部成功,要么全部失败。Oracle数据库支持事务管理,通过COMMIT和ROLLBACK语句进行控制。
1. 提交(COMMIT)
COMMIT语句用于提交当前事务,使所有更改永久生效。
示例
-- 插入新员工记录并提交事务
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (102, 'Jane', 'Smith', TO_DATE('2023-01-20', 'YYYY-MM-DD'), 70000);
COMMIT; -- 提交事务
2. 回滚(ROLLBACK)
ROLLBACK语句用于撤销当前事务中的所有更改。
示例
-- 插入新员工记录
INSERT INTO employees (employee_id, first_name, last_name, hire_date, salary)
VALUES (103, 'Alice', 'Johnson', TO_DATE('2023-01-22', 'YYYY-MM-DD'), 80000);
-- 回滚事务
ROLLBACK; -- 撤销上一次插入操作
三、使用游标处理数据
游标是数据库中用于逐行处理结果集的指针。Oracle支持显式游标和隐式游标。使用游标可以更加灵活地处理查询结果。
1. 隐式游标
隐式游标由Oracle自动创建,当执行单个SELECT语句时使用。可以使用SQL%ROWCOUNT属性获取受影响的行数。
示例
-- 查询员工信息
SELECT first_name, last_name, salary
FROM employees;
-- 获取受影响的行数
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM employees;
DBMS_OUTPUT.PUT_LINE('Number of employees: ' || v_count);
END;
2. 显式游标
显式游标是用户定义的,用于处理多个行的结果集。首先,必须声明游标,然后打开游标,提取数据,最后关闭游标。
示例
-- 声明游标
DECLARE
CURSOR emp_cursor IS
SELECT first_name, last_name, salary
FROM employees;
v_first_name employees.first_name%TYPE;
v_last_name employees.last_name%TYPE;
v_salary employees.salary%TYPE;
BEGIN
-- 打开游标
OPEN emp_cursor;
-- 循环提取数据
LOOP
FETCH emp_cursor INTO v_first_name, v_last_name, v_salary;
EXIT WHEN emp_cursor%NOTFOUND; -- 当没有更多行时退出循环
DBMS_OUTPUT.PUT_LINE('Employee: ' || v_first_name || ' ' || v_last_name || ', Salary: ' || v_salary);
END LOOP;
-- 关闭游标
CLOSE emp_cursor;
END;
四、总结
本文详细介绍了Oracle数据库中的数据操作语言(DML),涵盖了插入、更新、删除和查询数据的基本语法与示例。同时,深入探讨了事务管理的提交与回滚,以及如何使用游标逐行处理查询结果。这些操作是使用Oracle数据库进行数据管理和操作的基础。
如果你有任何问题或需要进一步的讨论,请随时联系我!希望这篇博客对你有所帮助!
评论区
评论列表
{{ item.user.nickname || item.user.username }}