Oracle数据库中的数据操作语言(DML)

class DML,ORACLE

数据操作语言(DML)是SQL的一个重要组成部分,用于操作数据库中的数据。Oracle数据库提供了丰富的DML功能,包括插入、更新、删除数据,以及事务管理和游标的使用。本文将深入探讨Oracle中的DML,涵盖事务管理的提交与回滚,以及如何使用游标处理数据。

一、数据操作语言(DML)概述

DML主要包括以下操作:

  1. 插入数据(INSERT)
  2. 更新数据(UPDATE)
  3. 删除数据(DELETE)
  4. 查询数据(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数据库进行数据管理和操作的基础。

如果你有任何问题或需要进一步的讨论,请随时联系我!希望这篇博客对你有所帮助!

评论区
评论列表
menu