Oracle MLE Multi-Language Engine 详解

Oracle MLE Multi-Language Engine 详解

适用版本:Oracle Database 21c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

MLE(Multi-Language Engine)支持在数据库运行 JavaScript/Python[1]:

详细见:Oracle 23c New Features 详解


2. 优势

2.1 语言

- JavaScript
- Python
- 数据库内

2.2 集成

- 数据本地
- 性能
- 安全

2.3 开发

- 现代语言
- 生态
- 开发友好

3. JavaScript

3.1 创建

CREATE OR REPLACE MLE MODULE js_module 
LANGUAGE JAVASCRIPT AS
$$
  function add(a, b) {
    return a + b;
  }
  return { add };
$$;

3.2 调用

CREATE OR REPLACE FUNCTION js_add(a NUMBER, b NUMBER) 
RETURN NUMBER 
AS MLE MODULE js_module SIGNATURE 'add(number, number)';

3.3 使用

SELECT js_add(1, 2) FROM dual;
-- 3

4. Python

4.1 创建

CREATE OR REPLACE MLE MODULE py_module 
LANGUAGE PYTHON AS
$$
  def calc(x):
    return x * 2
$$;

4.2 调用

CREATE OR REPLACE FUNCTION py_calc(x NUMBER) 
RETURN NUMBER 
AS MLE MODULE py_module SIGNATURE 'calc';

5. 数据访问

5.1 SQL

// JavaScript
const result = session.execute('SELECT * FROM emp');

5.2 绑定

const result = session.execute(
  'SELECT * FROM emp WHERE id = :id',
  { id: 1 }
);

6. 模块

6.1 创建

CREATE MLE MODULE my_module 
LANGUAGE JAVASCRIPT AS
$$
  // 代码
$$;

6.2 修改

CREATE OR REPLACE MLE MODULE my_module ...;

6.3 删除

DROP MLE MODULE my_module;

7. 环境

7.1 环境

CREATE MLE ENV my_env 
IMPORTS ('module1', 'module2');

7.2 依赖

- npm 包
- Python 包
- 管理

8. 应用场景

8.1 数据处理

- 复杂计算
- JavaScript
- 性能

8.2 API

- 数据库内 API
- REST
- 集成

8.3 机器学习

- Python
- 模型
- 数据库内

9. 性能

9.1 优势

- 数据本地
- 无网络
- 性能

9.2 开销

- 内存
- 执行
- 监控

9.3 限制

- CPU
- 内存
- 超时

10. 安全

10.1 沙箱

- MLE 沙箱
- 隔离
- 安全

10.2 权限

GRANT EXECUTE ON MLE MODULE my_module TO scott;

10.3 资源

- CPU 限制
- 内存限制
- 超时

11. 监控

11.1 视图

SELECT * FROM dba_mle_modules;
SELECT * FROM user_mle_modules;
SELECT * FROM dba_mle_environments;

11.2 性能

SELECT * FROM v$sql WHERE module = 'MLE';

12. 常见问题

12.1 执行错误

- 语法
- 检查
- 日志

12.2 性能

- 优化
- 监控
- 调整

12.3 内存

- 限制
- 监控
- 调整

13. 最佳实践

  1. 场景:合适
  2. 沙箱:安全
  3. 权限:最小
  4. 监控:性能
  5. 资源:限制
  6. 测试:充分
  7. 文档:代码
  8. 版本:管理
  9. 依赖:控制
  10. 演练:定期

14. 参考资料

[1] Oracle Database Multi-Language Engine (MLE) Guide 23ai https://docs.oracle.com/en/database/oracle/oracle-database/23/admdb/