首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 8中的Java脚本UDF

MySQL 8中的Java脚本UDF
EN

Stack Overflow用户
提问于 2022-11-06 17:09:33
回答 1查看 27关注 0票数 -1

我正在将很少的查询从谷歌BigQuery迁移到MySQL,并需要帮助将下面的BigQuery Java脚本UDF复制到等效的MySQL。我在网上没有看到任何参考资料。MySQL支持Java吗?这里的要求是将JSON数组拆分为一个简单的字符串数组(每个字符串表示单个JSON字符串)。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION `<project>.<dataset>.json2array`(json STRING) RETURNS ARRAY<STRING> LANGUAGE js AS R"""
if (json) {
    return JSON.parse(json).map(x=>JSON.stringify(x));
} else {
    return [];
}
""";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-06 17:34:54

不,MySQL不支持JavaScript存储函数。MySQL支持用过程语言编写的存储函数。它还支持从C或C++编译的可加载服务器的函数,但它们并不常见。

MySQL没有ARRAY数据类型。在MySQL中最接近的是JSON数据类型,它可能是一个一维字符串数组。如果您的JSON文档被保证是该格式的数组,那么只需执行以下操作:

代码语言:javascript
复制
CREATE FUNCTION json2array(in_string TEXT) RETURNS JSON DETERMINISTIC
  RETURN CAST(in_string AS JSON);

在本例中,我不确定创建存储函数的意义是什么,因为它只执行CAST()所能做的事情。因此,您最好调用CAST()并跳过创建存储函数。

也许,存储函数的一个很好的用途是测试输入,以确保它是一个具有数组格式的文档(使用类型())。例如:

代码语言:javascript
复制
CREATE FUNCTION json2array(in_string TEXT) RETURNS JSON DETERMINISTIC
   RETURN IF(JSON_TYPE(in_string) = 'ARRAY', CAST(in_string AS JSON), JSON_ARRAY());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74338018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档