IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【ORACLE】自定义dbms_mle扩展包,支持导入外部js模块 -> 正文阅读

[大数据]【ORACLE】自定义dbms_mle扩展包,支持导入外部js模块

项目地址:

https://github.com/Dark-Athena/dbms_mle_ext_pkg-oracle

开发目的:

用于简单化oracle 21c mle功能的使用

特点:

  • 可以轻松的从其他多种来源导入js模块,
  • 可以更轻松的定义输入及输出参数,
  • 你只需要了解plsql及js两种语言各自的语法,无需了解mle的特定语法

注意事项:

  • 由于可自由定义参数名称及参数个数,因此对于输入或输出参数的任意一个列表,暂只支持NUMBER/VARCHAR2参数的混用或CLOB参数的单独使用
  • 由于导入模块是采用简单的拼接字符串,因此请确认模块内有函数名称的定义,而非"_self"

案例

例1:基本用法

--example 1
declare
  i_parameter mle_js_ext_pkg.parameter_list;
  o_parameter mle_js_ext_pkg.parameter_list;
  i_js_code   clob := '';
begin
  i_parameter('person').p_value := 'World';
  o_parameter('greeting').p_value := null;
  i_js_code := 'var greeting = "Hello, " + person + "!";';
  mle_js_ext_pkg.exec_js(i_js_code   => i_js_code,
                         i_parameter => i_parameter,
                         o_parameter => o_parameter);
  dbms_output.put_line(o_parameter('greeting').p_value);
end;

例2:定义参数类型为数字(默认VARCHAR2)

--example 2 number type 
declare
  i_parameter mle_js_ext_pkg.parameter_list;
  o_parameter mle_js_ext_pkg.parameter_list;
  i_js_code   clob := '';
begin
  i_parameter('a').p_value := '2';
  i_parameter('a').p_type := 'NUMBER';
  i_parameter('b').p_value := '5';
  i_parameter('b').p_type := 'NUMBER';
  o_parameter('result1').p_value := null;
  o_parameter('result1').p_type := 'NUMBER';
  o_parameter('result2').p_value := null;
  o_parameter('result2').p_type := 'NUMBER';

  i_js_code := '
var result1 = a+b;
var result2 = a*b;
';
  mle_js_ext_pkg.exec_js(i_js_code   => i_js_code,
                         i_parameter => i_parameter,
                         o_parameter => o_parameter);
  dbms_output.put_line(o_parameter('result1').p_value);
  dbms_output.put_line(o_parameter('result2').p_value);
end;
/

例3:从一个动态sql导入js模块,输出一个clob参数

--example 3 import js module from a dynamic sql and export clob values
declare
  i_parameter mle_js_ext_pkg.parameter_list;
  o_parameter mle_js_ext_pkg.parameter_list_clob;
  i_js_source clob ;
  i_js_code   clob ;
begin
  i_parameter('url').p_value := 'https://www.darkathena.top';
  o_parameter('qrcode_pic') := null;
  i_js_code := q'{const code = qrcode(4, 'L');
code.addData(url);
code.make();
qrcode_pic = code.createDataURL(4);
}';
  mle_js_ext_pkg.import_module(i_src => i_js_source,
                               i_sql => q'{select content from mle_js_contents where name='qrcode'}');

  mle_js_ext_pkg.exec_js(i_js_code   => i_js_code,
                         i_parameter => i_parameter,
                         o_parameter => o_parameter,
                         i_js_source => i_js_source);
  dbms_output.put_line(o_parameter('qrcode_pic'));
end;
/

例4:从一个clob变量导入js模块

--example 4 import js module from a clob value
declare
  i_parameter mle_js_ext_pkg.parameter_list;
  o_parameter mle_js_ext_pkg.parameter_list_clob;
  i_js_source clob;
  i_js_code   clob;
  l_clob      clob;
begin
  i_parameter('url').p_value := 'https://www.darkathena.top';
  o_parameter('qrcode_pic') := null;
  i_js_code := q'{const code = qrcode(4, 'L');
code.addData(url);
code.make();
qrcode_pic = code.createDataURL(4);
}';
  dbms_lob.createtemporary(l_clob, true);
  select content into l_clob from mle_js_contents where name = 'qrcode';

  mle_js_ext_pkg.import_module(i_src => i_js_source, i_import => l_clob);

  mle_js_ext_pkg.exec_js(i_js_code   => i_js_code,
                         i_parameter => i_parameter,
                         o_parameter => o_parameter,
                         i_js_source => i_js_source);
  dbms_output.put_line(o_parameter('qrcode_pic'));
end;

例5:从一个url导入js模块(可能需要配置wallet及acl)

--example 5 import js module from a url

  mle_js_ext_pkg.import_module(i_src => i_js_source,
                               i_url => 'http://cdnjs.cloudflare.com/ajax/libs/qrcode-generator/1.4.4/qrcode.min.js');

例6:从一个文件导入js模块

--example 6 import js module from a file

  mle_js_ext_pkg.import_module(i_src      => i_js_source,
                               i_dir      => 'DB_BACKUP_DIR',
                               i_filename => 'qrcode.min.js');

例7:在一次执行中导入多个js模块

--example 7 import multiple js module 
declare
  i_js_source clob;
begin
  mle_js_ext_pkg.import_module(i_src      => i_js_source,
                               i_dir      => 'DB_BACKUP_DIR',
                               i_filename => '1.js');

  mle_js_ext_pkg.import_module(i_src      => i_js_source,
                               i_dir      => 'DB_BACKUP_DIR',
                               i_filename => '2.js');

  mle_js_ext_pkg.import_module(i_src => i_js_source,
                               i_url => 'http://cdnjs.cloudflare.com/ajax/libs/qrcode-generator/1.4.4/qrcode.min.js');

  mle_js_ext_pkg.import_module(i_src => i_js_source,
                               i_sql => q'{select content from mle_js_contents where name='qrcode'}');
end;
/

相关文章

【ORACLE】关于21c版本新增plsql包DBMS_MLE的研究

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:50:07  更:2021-12-02 16:50:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:08:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码