仅当结果中有多行时才提取数据



假设我有一个包含列p_idu_idcomments的表abc。只有当某个特定的p_id值有多行时,我才想从该表中获取数据(对于我想忽略的每个p_id,表中都有一行"垃圾"数据)。如何构建查询,以便在不从游标获取数据的情况下确定p_id是否有多行。

目前,我的代码看起来像这个

Declare
  Cursor pqr is 
  Select p_id,u_id,comments from abc where p_id=123;
Begin
--I want to ignore the results if this query returns 0 or 1 row.
--I only want to process the data if this query returns multiple rows
End;

您可以将分析COUNT添加到查询中,以便从光标获取的每一行中都可以获得结果集中的行数

Declare
  Cursor pqr is 
   select p_id,u_id,comments
     from (Select p_id,u_id,comments,count(*) over () cnt
             from abc 
            where p_id=123)
    where cnt > 1;
Begin

不过,这可能不会给你带来太多(如果有的话)性能。为了计算可能会使代码变慢的行数,您强制Oracle实现整个结果集。您还将向结果集中的每一行添加另一列,这将增加内存使用率。您仍然需要获取第一行才能访问CNT列。

您试图解决的业务问题是什么,需要在提取所有行之前知道要提取多少行?这不是通常需要的,所以也许有更好的方法来解决你面临的任何问题。

试试这个。它使第一列成为计数,所以执行它,获取第一行。第1列将包含您需要的数字。

WITH 
BASE AS
(
    SELECT SOME_STUFF
    FROM SOME_TABLE
    WHERE SOME_CONDITION
)
SELECT (SELECT COUNT(*) FROM BASE),
       BASE.*
FROM BASE

相关内容

  • 没有找到相关文章

最新更新