在SQL Server的SQL内部可以使用Java语言的扩展开源了


SQL Server长期以来一直与Common Language Runtime集成在一起,在该语言下它可以与.NET Framework的通用编程语言进行交互,从而可以编写存储过程,触发器,用户定义的类型,用户定义的函数,用户-定义的聚合,以及使用Visual Basic .NET或C#之类的流式表值函数。
对于其他语言(不是.NET框架的一部分),SQL Server仍可以通过所谓的语言扩展SDK(目前仅是用Java编写的程序)以最小的级别与它们进行交互。
作为Windows和Linux上SQL Server 2019 Release Candidate 1的一部分,Microsoft的Java可扩展性SDK添加了Java支持。
使用的默认Java运行时是Azul的Zulu Open JRE,但是您也可以使用其他Java JRE或SDK。但是,有充分的理由选择Zulu Java运行时。为了解决Oracle关于Java的许可陷阱,Microsoft与Azul合作免费提供Java企业版分发,最重要的是,Microsoft和Azul均提供了支持。
要使其工作,只需将您的类编译为library / .jar,并编写一个T-SQL存储过程,该存储过程将调用另一个sp_execute_external_script,该存储过程最终将对Java库的调用作为“ package.class”。

CREATE OR ALTER PROCEDURE [dbo].[java_regex] @expr nvarchar(200), @query nvarchar(400)
AS
BEGIN
--Call the Java program by giving the package.className in @script
--The method invoked in the Java code is always the "execute" method
EXEC sp_execute_external_script
@language = N'Java'
, @script = N'pkg.RegexSample'
, @input_data_1 = @query
, @params = N'@regexExpr nvarchar(200)'
, @regexExpr = @expr
with result sets ((ID int, text nvarchar(100)));
END
GO

--Now execute the above stored procedure and provide the regular expression and an input query
EXECUTE [dbo].[java_regex] N'[Jj]ava', N'SELECT id, text FROM testdata'
GO

 上面是编写的一个存储过程,该过程使用一个输入数据集和一个正则表达式。此过程对输入执行sp_execute_external_script,依次调用我们的java库regex.jar以返回满足给定正则表达式的行。它使用Java正则表达式来检查文本是否包含Java或Java单词。
这种扩展性有很长的路要走-您可以在各种情况下使用它,例如直接从SQL Server中调用REST API。换句话说,您不必编写通过JDBC与数据库连接的Java程序来获取数据,然后将其用于调用RESTful服务以返回一些返回值。您甚至可以使用JSON,因为SQL Server固有地支持JSON处理。因此,您可以从T-SQL内部直接调用与API交互的Java程序。
在安全方面,同样重要的是要注意,Java程序将在SQL Server查询的上下文中执行,因为同样适用于SQL Server沙箱防护。
最新消息是,Microsoft进一步迈出了第一步,并开放了此Java语言扩展的源代码,以激励开源社区为该项目做出贡献。

详细点击标题