Questions tagged «functions»

函数执行某些指定的工作,通常以参数为输入。就数据库而言,它们可能特定于SQL或数据库供应商。

1
声明函数波动是否IMMUTABLE会损害性能?
Postgres函数用波动性分类VOLATILESTABLEIMMUTABLE声明,或。众所周知,该项目使用内置功能的这些标签非常严格。并且有充分的理由。一个突出的例子:表达式索引仅允许IMMUTABLE函数,并且它们必须是真正不变的,以避免错误的结果。 用户定义的函数仍然可以自由地声明,如所有者选择的那样。该手册建议: 为了获得最佳的优化结果,您应该使用对它们有效的最严格的波动性类别来标记您的函数。 ...并添加了错误的波动率标签可能会出错的大量问题列表。 尽管如此,在某些情况下伪造的不变性还是有意义的。通常,当您知道该函数在您的范围内实际上是不变的。例: PostgreSQL是否支持“不区分重音”的排序规则? 除了对数据完整性的所有可能影响,对性能有什么影响?人们可能会认为声明一个函数IMMUTABLE只会对性能有所帮助。是这样吗? 声明功能波动会IMMUTABLE 损害性能吗? 让我们假设当前的Postgres 10缩小了范围,但是所有最新版本都很有趣。

1
Postgres:使用参数截断psql函数中是否存在
我试图获得一个psql函数,如果存在的话,它将截断给定的表名。我一直在尝试多种功能,但到目前为止它们都没有起作用。这是代码: CREATE OR REPLACE FUNCTION truncateIfExists(tableName TEXT) returns void as $$ BEGIN EXECUTE format( 'IF EXISTS ( SELECT * FROM information_schema.tables WHERE table_name =' || tableName || ' ) THEN TRUNCATE tableName; END IF; '); END; $$language plpgsql 现在,我可以使它在一个简单的过程中使用一个统一的名称工作: do $$ begin IF EXISTS (SELECT * FROM information_schema.tables WHERE table_name …

3
内联TVF的效果与观看次数
我有一个数据库,我在其中使用嵌入式TVF(表值函数)而不是视图。例如,我可能在TVF [fnCarBrands]内将两个称为[汽车模型]和[汽车制造商]的表连接在一起。 然后,其他TVF会调用这些TVF进行进一步的处理和报告。因此,我可以使用函数[fnCarBrands]并连接到表[购买年份]以形成函数[fnCarBrandHistory]。以此类推,用于多层TVF。 我可以使用视图获得相同的功能,因为我的内联TVF实际上只是表和其他TVF的连接。 用这种方式编写的嵌入式TVF的性能与视图相比如何?

1
是否有可能超载SQL Server函数?
是否可以重载SQL Server函数?是标量(如ltrim),还是聚合函数(如count)? 即使这是一个非常非常糟糕的主意。可能吗? T-SQL用户定义的函数重载有什么重复?我要说的不是100%重复,因为那是2005版的。也许这已经改变了?

1
为什么Set Returning Function(SRF)在FROM子句中运行较慢?
这是数据库内部的问题。我使用的是PostgreSQL 9.5,我想知道为什么在FROM子句中设置返回函数(SRF)(也称为表值函数(TVF))运行速度较慢,例如当我执行这些命令时, CREATE TABLE foo AS SELECT * FROM generate_series(1,1e7); SELECT 10000000 Time: 5573.574 ms 它总是比 CREATE TABLE foo AS SELECT generate_series(1,1e7); SELECT 10000000 Time: 4622.567 ms 这里是否可以制定一条通用规则,以便我们应该始终在FROM子句之外运行Set-Returning Functions ?

4
在查询中的多个列上调用同一个表值函数的最有效方法
我正在尝试优化一个查询,其中在20列上调用了相同的表值函数(TVF)。 我所做的第一件事是将标量函数转换为内联表值函数。 是否使用CROSS APPLY最佳执行方式对查询中的多个列执行相同的功能? 一个简单的例子: SELECT Col1 = A.val ,Col2 = B.val ,Col3 = C.val --do the same for other 17 columns ,Col21 ,Col22 ,Col23 FROM t CROSS APPLY dbo.function1(Col1) A CROSS APPLY dbo.function1(Col2) B CROSS APPLY dbo.function1(Col3) C --do the same for other 17 columns 有更好的选择吗? 可以在针对X个列的多个查询中调用同一函数。 功能如下: CREATE …

3
MySQL可能创建全局例程(存储过程和/或函数)
是否可以以某种方式定义全局可用的例程?似乎每个例程都必须在数据库范围内创建。 当我尝试从控制台创建例程(没有发出之前use dbname)时,出现错误: ERROR 1046 (3D000): No database selected 我们有大量相同的数据库(数据不同),目标是为某些表名创建一些触发器。但是我们只想运行一个例程,所以我们不必为每个数据库都创建这些例程(由于它们是相同的,因此例程对于每个数据库都将起作用)。

3
如何将带有数组字段的表类型传递给Postgresql中的函数
我有一张桌子叫书 CREATE TABLE book ( id smallint NOT NULL DEFAULT 0, bname text, btype text, bprices numeric(11,2)[], CONSTRAINT key PRIMARY KEY (id ) ) 和一个功能save_book CREATE OR REPLACE FUNCTION save_book(thebook book) RETURNS text AS $BODY$ DECLARE myoutput text :='Nothing has occured'; BEGIN update book set bname=thebook.bname, btype=thebook.btype,bprices=thebook.bprices WHERE id=thebook.id; IF …

3
在中央数据库中创建功能还是在每个数据库中重复?
我的一位开发人员编写了一个SQL函数,该函数的功能类似于VB.Net函数(LastIndexOf),并希望将其发布。我的问题是将其放入中央数据库而不是将其放入每个用户数据库的原因是什么? 开发人员试图将其放在sys模式中的主数据库上,这样他就不必限定来自用户数据库的调用... 但是我不确定将其集中到每个用户数据库的有效借口(显然不是主数据库)是什么?

3
如何创建用户定义的聚合函数?
我需要一个MySQL不提供的聚合函数。 我希望它具有MySQL的SQL风格(即不是C语言)。 我该怎么做呢?我所坚持的是创建一个聚合函数-这些文档似乎没有提到它是如何完成的。 所需的product功能用法示例: mysql> select product(col) as a from `table`; +------+ | a | +------+ | 144 | +------+ 1 row in set (0.00 sec) mysql> select col, product(col) as a from `table` group by col; +-----+------+ | col | a | +-----+------+ | 6 | 36 | | …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.