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. 最佳实践
- 场景:合适
- 沙箱:安全
- 权限:最小
- 监控:性能
- 资源:限制
- 测试:充分
- 文档:代码
- 版本:管理
- 依赖:控制
- 演练:定期
14. 参考资料
[1] Oracle Database Multi-Language Engine (MLE) Guide 23ai https://docs.oracle.com/en/database/oracle/oracle-database/23/admdb/