存储过程与触发器:深入理解 Oracle PL/SQL
                           
天天向上
发布: 2025-02-12 22:19:46

原创
369 人浏览过

1. 存储过程与触发器

  • 存储过程:是存储在数据库中的一组 SQL 语句集合,可以通过调用来执行。这些过程通常用于封装数据库操作,提高代码的复用性和可维护性。
  • 触发器:是一种特殊类型的存储过程,在特定的事件(如插入、更新或删除数据)发生时自动执行。

2. 存储过程与函数的创建和使用

  • 存储过程的创建: 存储过程通过 CREATE PROCEDURE 语句来创建。 示例
  CREATE OR REPLACE PROCEDURE increase_salary (emp_id INT, increment DECIMAL) AS
  BEGIN
      UPDATE employees
      SET salary = salary + increment
      WHERE employee_id = emp_id;
  END increase_salary;
  • 上述存储过程用于增加指定员工的工资。
  • 存储过程的执行: 执行存储过程时,使用 EXECCALL 语句。 示例
  EXEC increase_salary(101, 500);
  • 函数的创建与使用: 函数与存储过程类似,但它会返回一个值,通常用于计算和返回结果。 示例
  CREATE OR REPLACE FUNCTION calculate_bonus (emp_id INT) RETURN DECIMAL AS
      bonus DECIMAL;
  BEGIN
      SELECT salary * 0.1 INTO bonus FROM employees WHERE employee_id = emp_id;
      RETURN bonus;
  END calculate_bonus;
  • 该函数根据员工的工资计算奖金,并返回奖金值。 调用函数
  SELECT calculate_bonus(101) FROM dual;

3. 触发器的创建与应用场景

  • 触发器的创建: 触发器通过 CREATE TRIGGER 语句创建,通常在数据修改时自动执行。 示例
  CREATE OR REPLACE TRIGGER salary_update_trigger
  BEFORE UPDATE OF salary
  ON employees
  FOR EACH ROW
  BEGIN
      IF :NEW.salary > 10000 THEN
          INSERT INTO salary_changes (employee_id, old_salary, new_salary, change_date)
          VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE);
      END IF;
  END salary_update_trigger;
  • 该触发器会在员工工资更新前触发,检查新工资是否大于 10000,如果是,则记录工资变化。
  • 触发器的应用场景
  • 审计记录:在数据更改时自动记录变动历史。
  • 数据验证:在数据插入或更新时进行验证。
  • 自动计算:在数据修改时触发计算任务。

4. PL/SQL 语言基础

  • PL/SQL 结构: PL/SQL 代码块由声明部分、可执行部分和异常处理部分组成:
  • 声明部分:定义变量和常量。
  • 可执行部分:执行 SQL 语句和其他 PL/SQL 语句。
  • 异常处理部分:处理运行时错误。

示例

DECLARE
    v_emp_id employees.employee_id%TYPE;
    v_salary employees.salary%TYPE;
BEGIN
    SELECT employee_id, salary INTO v_emp_id, v_salary
    FROM employees
    WHERE department_id = 10
    AND ROWNUM = 1;

    UPDATE employees
    SET salary = v_salary * 1.1
    WHERE employee_id = v_emp_id;

    COMMIT;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('No employee found.');
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('An error occurred.');
END;
  • 上述代码会选取部门 ID 为 10 的一位员工,将其工资增加 10%。如果没有找到该员工,则输出错误信息。

5. 数据库备份与恢复

数据库的备份与恢复是确保数据安全的关键措施。Oracle 提供了多种备份策略和工具,帮助确保数据的持久性与恢复能力。

Oracle 数据库备份概述
  • 热备份与冷备份
  • 热备份:在数据库仍然运行的情况下进行备份,通常使用 RMAN(Recovery Manager)工具。
  • 冷备份:在数据库关闭的情况下进行备份。
RMAN(Recovery Manager)使用

RMAN 是 Oracle 提供的用于备份和恢复的工具,可以帮助管理数据库的备份任务。

  • 备份数据库
  RMAN> BACKUP DATABASE;
  • 恢复数据库
  RMAN> RESTORE DATABASE;
  • 备份归档日志
  RMAN> BACKUP ARCHIVELOG ALL;
数据恢复与灾难恢复
  • 完全恢复:当数据库丢失或损坏时,通过 RMAN 恢复到最近的备份点。
  • 点时间恢复(PITR):恢复到某个特定的时间点。
  RMAN> RUN {
      SET UNTIL TIME "TO_TIMESTAMP('2025-02-12 10:00:00', 'YYYY-MM-DD HH24:MI:SS')";
      RESTORE DATABASE;
      RECOVER DATABASE;
  }

6. 用户与权限管理

  • 创建与管理用户: 在 Oracle 中,可以创建不同的用户来进行权限控制。用户通常拥有特定的权限和角色,以控制其对数据库的访问。 示例
  CREATE USER john IDENTIFIED BY password;
  GRANT CONNECT, RESOURCE TO john;
  • 权限和角色的管理: Oracle 使用角色来简化权限的管理,用户可以授予或撤销特定角色和权限。 示例
  CREATE ROLE manager;
  GRANT SELECT, INSERT, UPDATE ON employees TO manager;
  GRANT manager TO john;

7. 审计与安全管理

  • 审计:Oracle 提供了数据库审计功能,用于记录用户活动,确保数据的安全性。 示例
  AUDIT SELECT TABLE, INSERT TABLE BY john;
  • 安全管理:通过加密、身份验证和访问控制来确保数据的机密性和完整性。

8. Oracle 高可用性与集群

  • Oracle Data Guard:提供数据保护和灾难恢复功能,通过备份和切换主库与备用库来保证高可用性。
  • Oracle RAC(Real Application Clusters):允许多个数据库实例在多个服务器上并行运行,共享数据库存储,提供更高的可用性和负载均衡。
数据库备份与恢复的高可用性策略
  • 双活架构:使用 Oracle Data Guard 或 RAC 等技术,确保数据库在一个节点故障时能自动切换到另一个节点,确保数据库始终可用。

这些内容涵盖了 Oracle 中存储过程、触发器、PL/SQL 编程、数据库备份与恢复、高可用性与安全管理等方面。掌握这些技巧和概念,将帮助你在开发和管理 Oracle 数据库时更加高效和安全。

发表回复 0

Your email address will not be published. Required fields are marked *