问题标签 [mysql-udf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1001 浏览

mysql - MYSQL UDF 函数返回 XML

情况:

我想创建一个名为 XMLify 的 mysql 函数,它接受一个字符串和一个返回集合的表达式

XMLify(string, expr)

该函数应该将集合中每个返回行的每个返回字段包装到它自己的 XML 标记中。标签的名称应该是字段名称。

小例子:

应该返回:

我想要这个,因为它使我能够运行具有许多连接和/或依赖子查询的复杂查询,而不必向客户端返回冗余数据。

我已经有了一个没有我想要构建的功能的解决方法。但这涉及编写不易维护的困难查询。请参阅下面的示例。

确保字段名称是合法的 XML 节点名称是为了以后担心。一旦函数成立,我会想到一些算法,将字段名称转换为一些合法的 XML 节点名称。

转义 XML 数据也是为了以后担心。这将通过一个名为 的不同函数来完成,该函数CDATAify将简单地将所有数据包装到<![CDATA[and]]>中,并将数据中任何先前出现的 转义]]>到 中]]]]><![CDATA[>

我无法使用 MySQL 中的存储函数来完成此操作,因为这些函数不包含结果集。此外,即使您将 SQL 作为字符串传递,然后准备语句并执行它,如果您还不知道字段名称,您也无法访问这些字段。

所以现在我想知道这个技巧是否可以用用户定义的函数(UDF)来完成。这是我还没有使用过的东西,我希望在入船之前得到你的建议。

问题:

所以我现在的问题是:

  • 回顾一下,我想要一个 MySQL 函数,我可以传递一个表达式或结果集,并且我还可以在其中使用结果集的字段名称。
  • 我是否正确地假设这在存储的函数中是不可能的?
  • UDF 会将表达式/它们的结果集作为参数吗?
  • UDF 是否允许我访问结果集的字段名称,因此我可以将它们用作 XML 标记名称
  • 它也可以在 Windows 上运行吗?我读到 UDF 有一些限制
  • 有没有更好的方法我还没有想到?
  • 我能否拥有一个可以在我自己的开发计算机上创建的 UDF .dll,然后将 .dll 文件复制到我的服务器并在那里使用它?
  • 我如何让这个节目一炮而红?请彻底并考虑到我在 Windows 计算机上安装了 MySQL 5.5 64 位。

例子:

想象一下有以下 3 个表:

我想要的结果是,仅限于 Bart 和 Lisa:

考虑:

  • 我不希望在 PHP 或 C# 中必须首先查询用户表,然后每个用户运行两个额外的成绩和玩具查询。因为对于 1000 个用户,我将运行 2001 个查询。
  • 我也不想运行一个包含所有连接的查询并通过 PHP 或 C# 中的结果集,因为用户名的发送次数与成绩数量乘以玩具数量一样多。想象一下,有一个包含巨大 blob 的用户字段!
  • 我不能简单地在连接表上使用 GROUP_CONCAT,因为成绩/玩具仍然会出现双倍。
  • 如果我将 GROUP_CONCAT 与 DISTINCT 一起使用,我将失去相同的成绩,例如 Bart 的两个 E。

所以目前我会使用下面的语句来得到这个结果,涉及两个依赖子查询。这很好用:

现在您可能会注意到,这是一个相当大且丑陋的查询,阅读时会伤眼睛。维护这样的查询很困难。如果我有我的函数 XMLify 和 CDATAify,我可以简单地写这个:

编辑:

正如 NB 的评论中提到的,在 Github 上有一个存储库,可能包含我需要的所有内容。然而,我现在花了几天时间试图让它在我的系统上运行,但没有成功。任何包含如何在 Windows 上运行的 MySQL 5.5 64 位服务器上安装它的分步操作方法的答案也是可以接受的。

请考虑到我没有使用 make、makefile 等方面的经验。所以请彻底解释。

0 投票
1 回答
1010 浏览

php - MYSQL trigger that externally launches a PHP script

I am currently trying to use a mysql trigger to launch a php script. When launched the script retrieves data from a particular website, and puts it into another table. I have tested the script, and it currently works when I run it using php5. I also have properly installed lib_mysqludf_sys, and moved the proper folders into the plugin folder for mysql. When I created the trigger I received no errors. It just wont run my php script. Where did I go wrong, and how could I fix it?

0 投票
0 回答
200 浏览

mysql - 从 MySQL 触发器调用 WCF 服务

0 投票
1 回答
3443 浏览

mysql - MySQL UDF 库安装

我正在尝试安装和使用 MySql UDF Lib,但在其安装过程中遇到了 ELF 错误。

我在 Ubuntu 14.04LTS 64 下。

尝试遵循其他一些答案并-m64为编译器添加了标志,但仍然出现错误。

免责声明:我不是 linux 专家,只是尝试解决程序问题

我的mysqlfile命令:

还有我的 libfile命令:

还有我的 mysqldfile命令:

0 投票
0 回答
129 浏览

mysql - 如何从mysql udf返回的数组中获取元素

我创建了一个 mysql UDF,它返回 char** 类型的变量。我这样做的原因是因为我需要同时将两个 char 数组返回给 mysql。但是当我构建一个调用这个UDF的mysql触发器时,我不知道如何从这个数组中获取元素。

这是我的UDF代码:

当我在创建触发器时需要从该数组中检索元素时,我陷入了困境,下面是我的伪代码,如果有人知道如何以正确的方式实现它,我将不胜感激:

0 投票
1 回答
770 浏览

c++ - C++ 中的 MySQL 用户定义函数

我正在尝试运行用 C++ 编写的 MySQL UDF。它编译良好并生成正确的输出,但在输出后会生成很多垃圾。我想知道这个垃圾的原因以及如何解决这个问题?我附上了我的代码和输出的屏幕截图。

在此处输入图像描述

0 投票
1 回答
126 浏览

mysql - preg_rlike 不匹配 ò , í , è 等字符

你能帮我匹配特殊字符ò , í , è,比如 mysql preg_rlike

即使数据库有值,它也不会检索数据。

我们可以处理这个,LIKE但我有很多喜欢Jòse|Jose|James

请让我知道我们该如何处理。

0 投票
1 回答
259 浏览

mysql - 当 MySQL 添加一个与你自己同名的函数时会发生什么?

我在 php (7.2) 中使用了 sha3 哈希,并且我将继续在 MySQL 中使用它们,但 MySQL 尚不支持它们。

如果我编写自己的 UDF 并调用它,例如 ,sha3但是将来的某个 MySQL 版本添加了本机sha3函数,会发生什么?

无论如何,我可能会将其命名为其他名称以避免可能的冲突,但这最终可能发生在任何函数上,所以我当然很好奇。


以防万一有人在 MySQL 中寻找 sha3 支持,我已经编写了一个 MySQL UDF,它使用 rhash 来完全做到这一点,它的功能与本机 sha2 函数完全相同,您可以在此处下载(安装和使用说明在评论中)https://gist.github.com/BrianLeishman/a0f40e7a0a87a7069c5c56a768ff3179

此外,值得注意的是,sha3 应该比 sha2 快(我认为),但我的函数是原生 sha2 的 4 倍(当生成 100,000 个哈希时),但希望未来的原生 sha3 能够解决这个问题。


我添加了一个单独的 UDF 用于返回没有十六进制编码的哈希值unhex_sha3,它实际上应该充当unhex(sha3(...,并且这个版本几乎完全是本机速度(与 相比sha2),因为我可以避免十六进制编码和返回之间毫无意义的转换。

https://gist.github.com/BrianLeishman/d7903a4acba75707c05fc581e1c714c3

0 投票
1 回答
63 浏览

mysql - GCC没有链接RHash?

我在我的测试环境中有这个工作,但我想我不知道我是怎么做到的。基本上,我正在尝试编译一个使用 RHash 函数的 MySQL UDF,但我是从 MySQL 服务器获取的

错误代码:1126。无法打开共享库“sha3.so”(错误号:0 /usr/lib/mysql/plugin/sha3.so:未定义符号:rhash_msg)

在服务器上我运行了这些

我什至从https://github.com/rhash/RHash下载了源代码(只是因为它还没有工作)并运行

这似乎没有给我任何错误,然后我编译

哪个也没有给出任何错误,但是在运行时我得到了那个 MySQL 错误

我在这里做错了什么?

以防万一,我的来源在这里https://gist.github.com/BrianLeishman/a0f40e7a0a87a7069c5c56a768ff3179


我已经看到了这个答案什么是未定义的引用/未解决的外部符号错误,我该如何解决?,但我很确定我已经正确设置了参数的顺序,但也许我错了,因为他们所有的例子都谈到在链接之前设置输出,这绝对不是我在这里做的。

0 投票
1 回答
260 浏览

mysql - 使用 cgo 构建时如何调试/转储 Go 变量?

我正在尝试使用 cgo 在 Go 中编写一个 MySQL UDF,其中我有一个基本的功能,但是有一些我无法弄清楚的点点滴滴,因为我不知道一些 C 变量是什么去。

这是我用 C 编写的一个示例,它强制将 MySQL 参数之一的类型设置为 int

这很好用,但后来我尝试用 Go 中的其他函数做同样/类似的事情,就像这样

有了这个构建错误

./main.go:24: 无效操作: (*args.arg_type)[0] (类型 uint32 不支持索引)

我不完全确定这意味着什么。这不应该是某种切片,而不是uint32?

这就是以某种方式将结构转储到某个地方(甚至在 Go 语法中作为超级加号)的某种方式非常有用的args地方,这样我就可以知道我正在使用什么。


好吧,我使用 spew 将变量内容转储到 init 函数内的 tmp 文件中(注释掉使其无法编译的行),我得到了这个