2016-09-28 74 views
0

我正在编写一个单独处理表行的PL/SQL函数。我通过它一个关键。检查该行是否已经被处理的最快方法是什么?如果忽略它,是什么?这可能听起来很愚蠢,但请假设它总是试图处理表中的所有行(主要是因为它也做了其他事情)。“忽略”一行的最快方法

我的一个解决方案是在该表上创建一个标志列(我能想到的最快),另一个是将一条记录插入另一个表并检查该行是否不在该表中(可能较慢)。

+0

应该做的功能是什么?您应该根据列指定一个订单。因为发布的问题太广泛了。你可能实际上不需要PL/SQL来做到这一点。张贴一些样本数据和预期结果。 –

+0

@vkp更新了我的问题。 – Mocking

+1

如果你关心速度,那么找一种方法来消除使用光标。您的处理不建议需要游标。 –

回答

0

假设您需要使用PL/SQL函数,您应该只传递它需要处理的行集。这意味着使用普通SQL从您需要的表中选择行并将其传递给函数。无论如何,只要你最终必须在数据库环境中使用游标,你应该仔细查看你正在做什么,因为这不是真正针对数据库优化的。

+1

这是一种与你的答案开头的矛盾:_“当你最终不得不在数据库环境中使用游标时,仔细查看你正在做什么,因为这不是真正针对数据库进行优化的_ 。在PL/SQL中,所有选择语句都是游标(隐式或显式),因此使用游标是PL/SQL中处理的基本和最佳方式。 – user272735

+0

我的意思是使用pl/sql而不是普通的sql通常不是必需的。我的意思是要小心使用游标逐行遍历结果集。 –

+0

我们不允许在生产实例中执行'regular'sql,只能执行程序和函数。 – Mocking