问题标签 [pipelined-function]
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.
oracle - 如何优化流水线、弱类型引用游标的使用
我在程序上遇到了一些问题;当运行“大”组(800 多个父母,1300 多个孩子)时,它非常慢(30 - 60 秒)。
基本思想是获取符合特定搜索条件的所有父记录(及其各自的子记录),以及必须计算的 3 条附加信息。
我解决这个问题的方法是
- 为计算值创建带有附加字段的自定义记录类型。
- 然后可以将对该记录类型的引用传递给由主处理函数控制的每个函数。
- 为每个父记录计算一个值时,将其附加到记录上。
每个过程每次搜索调用一次GET_PARENT_RECORDS
,GET_CHILD_RECORDS
每个计算函数运行 N 次(其中 N 是父记录和/或子记录的数量)。
问题1:这是正确的方法吗?(弱类型游标,流水线函数)如果不是,那么我应该如何解决这个问题,假设我可以重做?
问题 2:除非完全重写,提供的代码有什么明显可以改进的地方吗?
问题 3:或者其他什么问题,因为我注意到当我运行了几次程序时,同样的慢查询在 20 秒内返回?
包定义
包体
更新 昨天做了一些探索,发现了 Quest Batch SQL Optimizer(来自 Toad)。我插入了包裹,这就是我得到的。
批处理优化器结果
复杂查询
有问题的查询
haskell - 将递归函数重写为管道函数组合
我正在写作业(CIS194 Haskell 课程)。
我必须将以下递归函数重写为管道函数(没有明显的递归)。
我的第一次尝试是在这里:
这是一个正常的解决方案还是很奇怪?
我怎样才能fun2
更好地重写?
takeWhile
现在我尝试使用和编写版本iterate
我的第二次尝试:
我until
现在版本有点问题。
oracle - SELECT * FROM TABLE(流水线函数):我可以确定结果中行的顺序吗?
在下面的例子中,我总是会得到“1, 2”,还是有可能得到“2, 1”,你能告诉我你在文档中的哪个地方看到了保证是否存在?
如果答案是肯定的,这意味着没有ORDER BY
也ORDER SIBLINGS
没有办法确定 SELECT 语句中的结果集顺序。
谢谢你。
report - 在交互式报表中模拟 PL/SQL 返回 SQL 更好:集合或流水线函数
交互式报表 (IR) 最糟糕的方面是您无法使用 PL/SQL 返回 SQL 语句来创建它。我已经使用两种方法解决了这个问题:
1)APEX_COLLECTION.CREATE_COLLECTION
在 中Before Header Process
,它接受一条 SQL 语句(在过程中用 PL/SQL 构造),并让 IR 的来源为select c001 alias1, c002 alias2 ... from apex_collections a where collection_name = '...'
2)只要你需要,就可以用参数列表制作一个badass管道函数,然后让IR的源成为select * from table(package_name.pipelined_function_name(:P1_parameter1, :P1_Parameter2))
有性能差异吗?我最初使用第一种方法,但后来遇到了一个问题,它给了我一个错误,所以我尝试了流水线函数,发现我只是更喜欢它,并且从那时起就倾向于使用它们,除非这样做不合适(即当有大量的项目要传递给参数)。
oracle - 使用流水线表函数和关联表从具有函数的表中选择
由于此选择,我需要返回表格。传递给函数 opredelyaet 的参数,关联数据数组将从该函数中显示为表格:
select * from table(task_2.get_con_coll('save'));
我写了这段代码,对我来说它是正确的,我没有看到我错过了,或者它没有铺平
С创建一个对象
然后他创建了包
我的代码有什么问题?我无法理解我错过了什么。
sql - 当函数不再流水线时如何更改 PL/SQL 函数调用?
我的 PL/SQL 函数看起来像:
我从中选择(iBatis 代码):
如果我PIPELINED
要从函数中删除语句,我应该如何更改此选择?
oracle - 在参数中使用 sys_refcursor 编写通用流水线表 PL/SQL 函数
我有一个返回 open 的函数SYS_REFCURSOR
。该函数构建并执行几个不同的 SQL 查询并返回该游标。
我在 PHP 中使用该游标来获取结果,但性能不是很好,因为游标数据无法预取,并且每一行都有到数据库服务器的往返行程。
我想我会通过创建流水线函数来加快速度,该函数将光标作为参数并将行流水线化。
如何编写一个获取任何 sys_refcursor 作为参数并输出该游标的任何行类型的集合的表函数?
这么久以来,我已经编写了流水线表函数,但它们都是强类型的。在这种情况下,我宁愿不为每种可能的游标类型编写 n 次行类型、表类型和单独的表函数......
编辑
从获取数据的问题SYS_REFCURSOR
隐藏在我们的 php 代码中。自版本 11gR2 起,预取就与 OCI 一起使用。
由于我已经修复了预取错误,因此性能已经足够,我不再需要开发通用表格功能。
谢谢大家的支持和评论。
oracle - 表函数和流水线函数的区别?
第一个FN_RET_COL
是常规表函数,第二个FN_RET_PIPE
是流水线函数。我在一本书中学习了常规表函数要求集合在返回之前完全填充,因为在创建行后PIPELINED FUNCTION
使用PIPE ROW
调用将行从函数中推出,而不是建立表集合。节省内存并允许在生成所有行之前开始后续处理。我的疑问是:如何PIPELINED Function
节省内存?如果我没记错的话,它将所有行都管道化并将它们存储在内存区域中,然后在控制台中打印所有行。还是像这样,只要在控制台中通过管道传输新记录而不将其存储在任何地方,它就会直接逐行打印?
如果我的第二种情况是正确的,那么上面的代码是如何工作的?
c# - 在 ODP.NET 中执行流水线函数
我想“及时”从 C# 中的流水线函数中选择数据。这意味着该函数每秒传输一行(如状态报告),我想立即在 C# 中获取数据。
到目前为止,我有以下内容:
我的示例函数返回 n(唯一的函数参数)行,在 PIPE ROW 之前休眠一秒。如果我运行这段代码,我必须等待十秒钟,直到我一次得到十行。
但是,如果我第二次运行它,它会完美运行,我每秒会得到一行(总共十行)。也许只是因为语句缓存,当我添加该行时
即使在第二次运行时,我也会得到一个十行的块。
所以问题是:当我第一次执行代码时,任何人都知道如何“及时”(每秒逐行)获得十行?
非常感谢!
干杯基督徒
sql - 使用流水线函数微调 oracle 查询
我有一个查询(支持 Oracle Application Express 报告),我们的用户告诉我执行“缓慢”或速度不可接受(没有给出页面的实际加载时间,查询是唯一的这页纸)。
该查询涉及许多表,实际上引用了一个流水线函数,该函数识别当前登录到我们网站的用户,并根据我们拥有的自定义安全方案返回他们有权访问的自定义“表”记录。
我的主要问题是关于 Oracle 的查询缓存以及它们如何受到我们设置的影响。
当我从网页中取出查询并在 Sql Developer 中运行它(并手动指定用户 ID 以模拟登录到网站的用户)时,性能从 71 秒到 19 秒到 0.5 秒。显然,Oracle 正在利用其缓存机制来加快后续运行速度。
这是如何受到影响的?:
- 事实上,不同的用户将从管道函数中获得不同的表(所有相同的列,只是不同的行数和行中的值)。管道内衬是否会阻止缓存工作?我只看到缓存是因为我正在运行一个非常孤立的测试吗?
- 更进一步——缓存是否容易受到使用系统的人数的影响?我不确定可以缓存多少“多少”。因此,如果我们有 50 个并发用户正在访问网站的不同部分并整天加载不同的查询,那么 oracle 是否可能无法缓存其中的许多/任何一个,因为它不断地看到不同的请求查询?
抱歉,我的问题不是很技术性。
我是一名开发人员,被要求帮助解决这个看似 DBA 的问题。
此外,这很复杂,因为我无法真正确定实际加载时间是多少,因为我们的用户没有报告那个详细程度。
任何想法:
- 我如何确定这个查询是否真的很慢?
- 平均处理时间是多少?
- 如果出现问题,如何进行微调?
谢谢!