问题标签 [user-defined-functions]

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 回答
1864 浏览

sql - SQL Select 语句中的函数

我有一个像上面这样的查询。我有一列是 fn1 的输出。我想将该输出用于其他函数 fn2。在那种情况下,我不能直接在 fn2 中使用 col3,所以我拆分了两个函数并查看如下。我想知道我是否朝着正确的方向前进,我正在做的事情是正确的还是有更好的方法来做到这一点?在 View1 的注释部分中,函数 fn1 会调用两次吗?还是 SQL Server 会负责优化它?

0 投票
2 回答
2108 浏览

sql - MySQL 中的 UDF 性能

当查询在 SELECT 或 WHERE 子句中包含对 UDF 的调用时,我注意到 MySQL 查询执行时间呈指数级性能下降。有问题的 UDF 查询本地表以返回标量值 - 因此它们不仅执行算术表达式,而且充当相关子查询。我通过简单地删除 UDF 并使用相关子查询、更复杂的连接等重写来解决了性能问题。

我想如果我只有使用 MySQL 的经验,我会简单地接受这一点,调整我对 UDF 的使用并继续前进。但在使用 MySQL 之前,我在 SQL Server 上工作了 5 年以上。我构建了一个计费系统来处理更大的数据集,并且非常依赖标量和表值用户定义的函数。这些 UDF 还执行查询(即不仅仅是算术运算)。在 SQL Server 上使用用户定义的函数时,我没有遇到这种性能损失。

我想知道的是,这里是否有人足够了解 SQL Server 与 MySQL 的内部结构,可以证实或解释我目前关于 UDF 在两个系统上的性能差异的原因的理论。我的理论是 SQL Server 的优化器评估 UDF 的方式与 MySQL 的不同。也许是因为表引擎在 MySQL 中解耦了?或者,UDF 在 SQL Server 上的使用更为普遍,而 MySQL 引擎的优化器还没有发展到这么远?我在想的是,也许 SQL Server 优化器将包含的 UDF 视为周围查询的一​​部分(如果可能),然后将其与查询的其余部分一起优化?也许我在这里有点离题,但我只是从未见过在 SQL Server 上使用 UDF 会造成这种性能下降。

其他人可以在此问题上发表的任何见解将不胜感激。

0 投票
1 回答
654 浏览

sql - 使用存储过程进行元编程?

这将是一个直接的问题和一个讨论点。我先问一个直接的问题:

一个存储过程可以动态创建另一个存储过程吗?(我个人对 SQL Server 2008 很感兴趣,但为了更广泛的讨论,将其保持开放)

现在到我要问的原因。简而言之(您可以在其他地方阅读更多内容),SQL Server 中的用户定义的标量函数充其量是性能瓶颈。我在我们的代码库中看到了将总查询速度降低 3-4 倍的用途,但据我所知,S-UDF 的本地影响可能是 10 倍以上

但是,UDF 可能非常适合提高抽象级别、减少大量繁琐的样板、集中逻辑规则等。在大多数情况下,它们归结为可以轻松内联扩展的简单表达式 - 但它们不是(我真的只考虑非查询函数——例如字符串操作)。我已经看到了一个错误报告,将在未来的版本中解决这个问题——得到了 MS 的一些支持。但是现在我们必须忍受(恕我直言)破碎的实施。

一种解决方法是改用表值 UDF - 但是这些会使客户端代码复杂化,而您并不总是希望处理(尤其是当 UDF 仅计算表达式的结果时)。

所以我最初的疯狂想法是用 C 预处理器指令编写过程,然后在提交给 RDBMS 之前将其传递给预处理器。这可能有效,但有其自身的问题。

这让我想到了下一个疯狂的想法,即在数据库本身中定义“宏”,并拥有一个主 proc,它接受一个包含未处理的带有宏的 SP 的字符串,内联扩展宏,然后将其提交到 RDMS . 这不是 SP 擅长的,但我认为它可以工作——假设你首先可以做到这一点——因此是我最初的问题。

但是,现在我已经解释了我的问题路径,我也想将它留给其他想法。我敢肯定,我不是唯一一个沿着这些思路思考的人。也许已经有第三方解决方案了?我的谷歌搜索还没有出现太多。我也认为这将是一个有趣的讨论话题。

[编辑]

我在研究中发现的这篇博文描述了我所看到的相同问题。如果有人能指出我或博客海报可能做错导致开销的事情,我会很高兴。

我还应该补充一点,我在我的 S-UDF 上使用 WITH SCHEMABINDING,尽管它似乎没有给我任何优势

0 投票
2 回答
18022 浏览

sql-server - 用户定义函数中的错误处理

我想在 SQL Server 2005 中编写一个非 CLR 用户定义函数。该函数接受一个输入字符串并返回一个输出字符串。如果输入字符串无效,那么我想向调用者指示错误。

我的第一个想法是使用 RAISERROR 引发异常。但是,SQL Server 不允许在 UDF 中这样做(尽管您可以在基于 CLR 的 UDF 中引发异常,如图所示)。

如果输入值有误,我最后的办法是从函数返回 NULL(或其他一些错误指示值)。但是,我不喜欢这个选项,因为它:

  1. 不向调用者提供任何有用的信息
  2. 不允许我返回 NULL 以响应有效输入(因为它被用作错误代码)。

是否有任何调用者友好的方式来停止 SQL Server 中的错误函数?

0 投票
1 回答
586 浏览

java - DB2 AS400 Java 函数总是返回相同的值

我正在用 Java 向 AS/400 上的 DB2 编写一个用户定义的函数,发生了最奇怪的事情。
即使我正在更改它,我总是从该函数中得到相同的结果,即使我删除它并再次创建它即使我指定 NOT DETERMINISTIC ..
有没有人遇到过这样的行为?

0 投票
5 回答
2838 浏览

performance - Oracle 10g 中的字符串匹配,其中任何一方都可以有通配符

测试用例模式和数据如下:

现在忽略掩码列并假设存在 specialmatch 函数:

应该产生:

下一个,

应该产生:

下一个,

应该产生:

下一个,

应该产生:

关于如何制作特殊匹配功能的任何想法?

我天真的方法是写一个特殊的字符串比较 udf(伪代码):

同样在进行匹配之前,需要将掩码覆盖在 val 上。

例如:val='1_345678', mask=' _ _' => 1_34567_ 并且匹配 12345678 和 19345679 但不匹配 92345678。

但是如何做到这一点来利用索引、优化器等......

0 投票
5 回答
13228 浏览

excel - Excel 中的用户定义函数和速度问题

我有一个使用几乎所有 UDF 的 Excel 模型。比如说,120 列和 400 多行。计算是先垂直然后水平完成的——首先完成第 1 列的所有计算,然后第 1 列的最终输出是第 2 列的输入,依此类推。在每一列中,我调用大约六个或七个 UDF调用其他 UDF。UDF 通常输出一个数组。

每个 UDF 的输入是一些变量,一些范围变量,一些双精度数。范围变量在访问其内容之前在内部转换为数组。

我的问题如下,我可以在没有 UDF 的情况下构建 Excel 模型,并且当我运行模拟时,我可以在 X 小时内完成所有计算。当我使用 UDF 时,模拟时间是 3X 小时或更长。(要回答这个显而易见的问题,是的,我需要使用 UDF,因为如果我想对模型进行一些小的更改(比如添加另一种资产类型(它是一个财务模型)),则需要将近一天的时间来重新制作模型如果没有 UDF 来适应新的法律/财务结构,使用 UDF 大约需要 20 分钟来适应不同的财务结构。)

无论如何,我已经关闭了屏幕更新,函数中没有复制和粘贴,Variant 类型的使用最少,所有数据都包含在一张表中,我在获取内容之前将所有范围类型变量转换为数组.

除了获得更快的计算机或同等设备以使 VBA 代码/Excel 文件运行得更快之外,我还能做什么?请让我知道这是否需要更多说明。

谢谢!

0 投票
1 回答
1045 浏览

sql - Firebird UDF creation failure

I have a firebird database that I need to recreate. It contains an external UDF function. I made an SQL dump of the DB structure using IB Expert:

However, I get an error when I run the query:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 27.
'LPAD'.

I'm using Firebird 2.1.1 on Windows. Does anyone know what might be the problem?

0 投票
3 回答
7751 浏览

c# - 在 Excel 2007 中从单元格公式调用用 C# 编写的方法

我正在使用 Excel 2007。我有用单独的二进制文件编写的 C# 代码。该代码在类上使用静态类和静态方法。我在我的 VSTO Excel 工作表项目中引用了 DLL。我必须添加或修改什么才能使其正常工作?

我的 C# 代码如下所示:

我希望能够将公式放入如下所示的 Excel 单元格中:

管他呢。

我已经看到了这一点,但它似乎适用于 Excel 2003 中的非静态类。我不敢相信集成现在没有更好。

我已经查看了很多关于此的 StackOverflow 问题。它们似乎没有提供本机集成(很多人说,“使用 X 开源库”),而且不祥的是,许多不被 OP 接受。我不是在寻找“将其制成 COM 对象并从 VBA 调用它”。

所以我正在寻找:

  • Excel 2007
  • C# DLL 中的代码
  • 从 Excel 单元格调用为 UDF
  • 本机集成

所以这是另一个 StackOverflow 链接,其中两个响应者说:

  • 据我所知,您不能直接在 VSTO 中创建 UDF。
  • VSTO 不支持创建 Excel UDF。可以在 .Net 中创建自动化加载项,并且似乎是 Microsoft 认可的执行方式。

这是 2009 年 6 月的一个问题。这是真的吗 - 在 2009 年,您必须将 .NET 组件公开为 COM 服务器才能获得 Excel 的可调用 UDF?

0 投票
3 回答
1724 浏览

sql-server - SQL Server的自定义排序功能

我在 SQL Server 2005 中有一个列,它将版本号存储为我想要排序的字符串。我一直无法找出如何对这一列进行排序,尽管我猜这将是某种自定义函数或比较算法。

谁能指出我从哪里开始的正确方向?我可能在谷歌上搜索错误的东西。

干杯

特里斯