PL 引擎(PL Engine)和 SQL 引擎(SQL Engine)可以交互工作。SQL 可以直接访问 PL 引擎,比如 SQL 语句可以使用用户自定义函数。PL 可以通过 SPI 接口访问 SQL 引擎,进行表达式计算和执行 SQL 语句。两者的交互关系如下图所示。

    PL架构.png

    OceanBase 数据库天然的分布式特性决定 PL 的执行也是分布式的,PL 的解析、编译和执行都在某一个 OBServer 上完成,当 PL 里涉及到 SQL 交互时,会通过 SPI 调用 SQL 引擎,由 SQL 引擎 执行 SQL 语句,如果该 SQL 语句是分布式的,那么会进行分布式执行。

    当分布式执行的 SQL 调用了 PL 函数时,PL 函数可能会在多个 OBServer 上编译执行,每个 OBServer 上保证在相同的环境参数下进行编译,从而编译出的 PL 具有相同的行为。