问题标签 [table-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 回答
1956 浏览

oracle - 在 Oracle 中使用流水线表函数实现参数化视图功能的注意事项?

我们已决定在 Oracle 中的一些常规视图之上分层一些“参数化视图”,以便正确鼓励在查询中始终使用正确的 where 谓词。

大部分重复代码(适当连接的表)将显示在视图中,因此我们将不再拥有许多不同的过程和函数,它们都有自己的通用连接和过滤器副本。

然后我们将在这些视图上分层流水线表函数,以确保调用者提供必要的过滤器,这样视图就不会“在所有时间和空间上”被调用。我已经查看了使用 sys_context 和 userenv 以及包变量的替代方案,尽管它们似乎是 Oracle 用户所称的参数化视图,但它们根本不可行,每次使用视图时都将这些 shims 放在视图周围,并且它们不能在自加入。

我在很多地方读过很多关于这个的内容,包括 StackOverflow:

ORACLE 11g 中的表值函数?(参数化视图)

数据库:流水线函数

是否允许在流水线 PL/SQL 表函数中使用 SELECT?

这是一个架构决策,旨在尝试提高应用程序的可维护性,该应用程序已因大量重复查询而变得庞大。视图会在某种程度上有所帮助,但我担心我们无法对调用者强制执行谓词以阻止他们做愚蠢的事情。

我在 SQL Server 中通过内联表值函数使用这种技术取得了很大的成功,它确实有助于使系统更加连贯,并且更容易跟踪所提议更改的依赖关系和影响,因为有 a) 更少的代码b) 更多的重用和更少的重复。

我有点担心最后一个链接,这似乎暗示如果我要加入其中一个流水线表函数并使用它来更新另一个表,我可能会遇到并发或时间问题。

请分享您使用流水线表函数的经验以及我需要注意什么?另外,如果有更好的选择,也请在您的回答中告诉我?

0 投票
1 回答
674 浏览

django - Django QuerySet 从 sql 表函数中选择的方式

大家。

我使用 Django 1.3 和 Postgres 9.0。我有非常复杂的 sql 查询,它使用一些额外的字段扩展了简单的模型表查找。并且它包含在表函数中,因为它是参数化的。
一个月前,我设法在原始查询的帮助下使其工作,但 RawQuerySet 缺少许多我真正需要的功能(过滤器、count() 和 clone() 方法、可链接性)。
这个想法看起来很简单。QuerySet 让我执行这个查询:

而我需要这样做:

所以问题是:我该怎么做?我已经开始创建自定义管理器,但不能用自定义字符串替换 model.db_table(因为它被引用并且数据库停止识别函数调用)。
如果没有办法用函数替换表,我想知道我是否可以从 RawQuerySet 创建 QuerySet(不是最干净的解决方案,但简单的 RawQuerySet 给......一个身体部位带来了如此多的痛苦)。

0 投票
2 回答
67 浏览

tsql - 使用表函数中的数据随机化 SQL 数据

我试图制作一个 sql 脚本,它将随机化“成员”表的城市、州和邮政编码。我创建了一个表函数,它返回一行,其中包含随机取自另一个数据库的“city”、“state”和“zip”列(通过视图)。这可确保我获得在现实世界中实际相互关联的城市、州和邮政编码。

从那里我试图做这样的事情:

问题是,这只调用我的函数一次,并将相同的城市、州和 zip 放入表格的每一行。有没有办法为表中的每一行调用一次我的函数?

0 投票
1 回答
1621 浏览

excel - 从 DB2 读取 Excel

我必须定期导入一些 Excel 数据。查看DB2 文档可以通过外部函数直接访问 OLE DB 数据源。

但是我无法正确设置它。我获得了Microsoft Access Database Enginge 2010和修订包,并将其安装在数据库服务器上。

我将 excel 文件放在数据库服务器的本地目录中。( C:\Temp\test.xls)

excel有一个名为的工作簿TEST1和两行ABC,并DEF遵循一些数字数据:

为了创建表函数,我使用了以下语句:

它似乎创建了该功能。但是,当查询数据时:

我收到以下错误:

用户定义函数“MYSCHEMA.TEST_EXCEL”收到来自指定 OLE DB 提供程序的 OLE DB 错误。HRESULT="0x80040e37"。诊断文本:“Microsoft Access 数据库引擎”.. SQLCODE=-1183, SQLSTATE=38506, DRIVER=3.53.71

根据文档,错误意味着:0x80040E37 The specified table does not exist.

应该参考!TEST!工作簿,但是我不确定它是否是正确的语法。如何从 DB2 访问 Excel 工作表?有没有办法获得更详细的错误信息?有没有人正确的命名方案?

0 投票
2 回答
2157 浏览

sql - 如何在 postgresql 的“tablefunc”查询中包含空值?

我正在尝试使用交叉表函数postgresql来创建一个pivot table. 但是,我很难理解如何在查询中构造我的 SQL。我的数据由四列组成,如下所示:

在此处输入图像描述

我使用以下代码创建此表:

postgresql密切关注文档,我在crosstab查询中使用以下代码:

这导致下表不是我想要的:

在此处输入图像描述

例如,在第二行,我想要以下值:

相反,这些值为:

但是,似乎这些null值被忽略了,因此我的列名g1,g8不对应于原始组。

0 投票
1 回答
2554 浏览

oracle - Oracle PL/SQL 中的回调函数

我一直在 PL/SQL 中进行一些数据转换/处理,我想从我的包中消除重复的代码。这是相关的代码部分。

表函数的输入类型:

处理一条记录的程序:

遍历游标的表函数,处理游标中的每一行并通过管道输出(如果有):

转换/处理有几个步骤,例如,我将运行以下选择来进行一些处理并以给定的顺序应用一些规则:

这一切都很好,花花公子,唯一的问题是,我的 trip_rule 包包含许多apply_*_rule功能。它们都类似于示例apply_discontinuity_rule。唯一的区别是discontinuity_rule他们回调的实际过程 ( )。

所以,我的问题是,我怎样才能避免复制apply_*函数的代码。有没有更优雅的方法来做到这一点,然后使用一个大的 if:if p_rule_name == 'discontinuity_rule' then

我还知道可以使用过程名称动态创建匿名 PL/SQL 块并将其作为动态 SQL 执行。我想知道它是否可以正确完成,而不会影响我的表现。任何想法都值得赞赏。

0 投票
1 回答
2992 浏览

sql - 在带有参数的子查询中使用 sql 函数

我有以下有效的查询:

但是,我需要做的是在最里面的 select 语句中使用一个函数来返回正确的值。我编写了如下查询:

此查询总是以“'.' 附近的语法不正确”而失败,这似乎与传递给函数的 u.hmy 和 t.hmyperson 有关。如果我为这些参数中的每一个输入一个实际值,它就可以正常工作。

有人可以告诉我我做错了什么吗?我已经看到使用交叉连接的参考,但我不知道如何进行这项工作。

谢谢!!

0 投票
1 回答
752 浏览

sql - 函数返回空集

我已经在 SQL 2008 中成功创建了一个函数:

问题是当我调用函数时:

我没有得到任何结果。我得到的是函数中引用的列,但没有数据。如果我将 select 语句从函数中复制出来并使用 @ColName 的有效参数运行它,我会得到结果。

0 投票
1 回答
30 浏览

sql - Getting part of query defined by a parameterized function

Hello all :) I'm try to do something like this in Oracle 10g:

Where get_some_other_info(CAR_ID) would return several columns:

I need to use a function for implementation reasons. I feel that I could use Table functions, but I cannot wrap my head around how to use them for my case.

Best regards,

0 投票
0 回答
43 浏览

sql-server - 如何将 TOP() 与表函数结合使用

我正在尝试做这样的事情:

问题在于它给出了一条错误消息:

如何使这项工作。请帮忙。