📜  PLSQL 架构(1)

📅  最后修改于: 2023-12-03 15:33:43.299000             🧑  作者: Mango

PL/SQL 架构介绍

PL/SQL 是 Oracle 数据库中的一种编程语言,用于开发存储过程、触发器、函数、包等对象。在 Oracle 数据库中,PL/SQL 执行引擎被称为“PL/SQL 引擎”,其架构包括了以下几个部分:

解释器

解释器是 PL/SQL 引擎的核心部分,它实际上就是 PL/SQL 语言的编译器。当我们定义一个 PL/SQL 对象时,其实就是创建了一个 字符串,然后交给解释器进行编译,最终将生成一个存储过程、函数或者包等可执行的 PL/SQL 对象。

运行时环境

PL/SQL 引擎有一个运行时环境,它负责管理和运行 PL/SQL 对象。运行时环境包括:

  • 共享池:存储了已经被编译的 PL/SQL 代码。
  • 用户区:存储了 PL/SQL 对象在运行时需要的数据,例如变量、游标、异常处理器等。
  • 栈:用于存储函数和过程的参数、返回地址等信息。
  • 进程:PL/SQL 处理器进程。
存储器

PL/SQL 引擎的存储器包含两部分:

  • 共享池:存储了 PL/SQL 的共享代码,即被多个会话共享的代码部分。
  • 上下文存储器:存储了 PL/SQL 对象的上下文信息,例如用户定义的变量、包状态等。
通信接口

PL/SQL 引擎与 SQL 引擎之间通过通信接口进行沟通。当 PL/SQL 对象需要访问数据库时,它会调用通信接口与 SQL 引擎进行交互。

代码片段
-- 创建一个存储过程,其中定义了一个变量和异常处理器
CREATE OR REPLACE PROCEDURE p1 AS
  v_number NUMBER := 10;
BEGIN
  -- 如果 v_number 大于 5,则抛出一个异常并输出错误信息
  IF v_number > 5 THEN
    RAISE_APPLICATION_ERROR(-20001, 'v_number is too big!');
  END IF;
  
  -- 如果没有异常,输出一个信息
  DBMS_OUTPUT.PUT_LINE('p1 ran successfully!');
END;
/