龙空技术网

23c新特性在数据库内部创建、存储和执行JavaScript

杨建荣的学习笔记 21

前言:

眼前大家对“jsoracle”大约比较关怀,朋友们都想要学习一些“jsoracle”的相关知识。那么小编在网上搜集了一些关于“jsoracle””的相关内容,希望看官们能喜欢,兄弟们一起来学习一下吧!

、Oracle 数据库支持一组丰富的语言来编写用户定义的函数和存储过程,包括 PL/SQL、Java 和 C。借助 Oracle 数据库多语言引擎 (MLE),开发人员可以选择通过动态执行或直接存储在数据库中的持久 MLE 模块来运行 JavaScript 代码。

编程语言的格局正在迅速发展,越来越多的开发人员选择使用像JavaScript这样的现代动态语言。除了更简单的语法和对现代语言功能的支持之外,这些语言流行的一个关键因素是存在丰富的模块生态系统。开发人员通常选择使用不同的语言来实现项目的不同部分,具体取决于给定任务的合适模块的可用性。

一种新语言是否被广泛采用往往取决于社区的参与。一旦一种语言达到某种流行的门槛,它的生态系统通常开始迅速扩展,吸引越来越多的开发人员。很多时候,会创建一组丰富的功能、库和可重用的代码模块来支持更广泛的使用。

Oracle数据库以其对丰富的编程语言生态系统的支持而闻名。Oracle 数据库最常见的编程服务器端接口是 PL/SQL。通过使用PL / SQL,可以将业务逻辑和数据保持在一起,除了为数据提供统一的处理模式外,通常还可以显著提高效率,而不管使用何种客户端接口。使用MLE,你可以利用PL / SQL来实现JavaScript模块,提供直接与数据库交互的额外途径。

Oracle 数据库多语言引擎MLE允许您直接在 Oracle 数据库中运行和存储 JavaScript。

使用 MLE 使 Oracle 数据库的用户能够运行:

存储过程

存储函数

PL/SQL 包命名空间中的代码

匿名、动态的代码片段(类似于DBMS_SQL)

接下来我们就通过例子来看看这项功能是如何使用的吧。

一、环境准备

1.Oracle 23数据库

2.一个CDB和一个PDB

二、创建用户并对用户授权

要直接在 Oracle 数据库中运行和存储 JavaScript,相关用户需要授权。

该应用需要授于如下权限:

GRANT EXECUTE ON JAVASCRIPT TO user/role;

如果此用户需要使用DBMS_MLE动态执行JS脚本还需要

GRANT EXECUTE DYNAMIC MLE TO <role | user>

此外23c新增加了一个开发员角色,强列建议使用,此开发员角色已包含大部份开发人员所需要的权限,使用如下方法进行赋权:

begindbms_developer_admin.grant_privs('DEVUSER');end;/

三、创建JavaScript并执行

接下来演示在数据库里面创建并存储JavaScript代码,然后由PL/SQL存储过程进行调用,在SQL里面展示JavaScript代码执行后输出结果。

创建JavaScript MLE Module,暴露给PL/SQL或者SQLcreate or replace mle module helloWorld_modulelanguage JavaScript asfunction helloWorld() {console.log('Hello World, this is a JS module');}export { helloWorld }/创建存储过程并调用JavaScript MLE Module:create or replace procedure helloWorld_procas mle module helloWorld_modulesignature 'helloWorld()’;/在SQL会议里面调用此存储过程执行JavaScript代码:set serveroutput onBEGINhelloWorld_proc;END;/

四、调用外部JavaScript文件

Oracle Database 23c充话用户调用已经写好的JavaScript文件,内部指定的数据库目录名为JS_SRC_DIR,需要将.js文件放到此指定的目录下。

CREATE OR REPLACE DIRECTORY JS_SRC_DIR AS '/home/oracle/javascript';grant Execute on DIRECTORY JS_SRC_DIR to dev_vli;

create mle module ch02mod03language javascriptusing bfile(JS_SRC_DIR, ‘myfile.js');/

create or replace mle env ch03env01imports ('ch03mod01' module ch03mod01);

DECLAREl_ctx dbms_mle.context_handle_t;l_snippet CLOB;BEGINl_ctx := dbms_mle.create_context(environment => 'CH03ENV01');l_snippet := q'~(async () => {let { hello } = await import('ch03mod01');const greeting = hello('world');console.log(greeting);})();~';dbms_mle.eval(l_ctx,'JAVASCRIPT',l_snippet);dbms_mle.drop_context(l_ctx);EXCEPTIONWHEN OTHERS THENdbms_mle.drop_context(l_ctx);RAISE;END;/

五、总结

随着Oracle数据库多语言引擎(MLE)的引入,JavaScript被添加到数据库中。JavaScript的加入承认了该语言的受欢迎程度,并为服务器端数据库开发打开了其广泛的生态系统。使用 MLE,您可以使用 JavaScript 生态系统中可用的习语和工具,以及直接在数据库中部署和使用来自流行存储库(如 Node Package Manager (NPM))的模块。此外,可以在应用程序层之间移动,为处理不同工作负载的团队提供更大的灵活性。大量的 JavaScript 人才库可以帮助员工现有和即将到来的项目。

编辑: 殷海英

标签: #jsoracle #sqljs #c调用js接口原理 #js文件怎么创建 #执行js文件