需要PL / SQL块来根据我的要求检索数据

时间:2018-05-02 15:21:13

标签: sql oracle plsql

我有一张桌子ABC。在此表中,基于AGE,我需要查找重复项,对于那些重复记录,我需要在dbms_output.put_line中选择一些列。

DECLARE 
CURSOR C_AGE IS 
SELECT AGE FROM ABC
GROUP BY AGE
HAVING COUNT(1)>1 ;
BEGIN
FOR RECS IN C_AGE
LOOP
DBMS_OUTPUT.PUT_LINE (recs.age);
END LOOP;
end;

在上面的代码中,我不需要显示AGE,而是需要输出中的ID,Name,AGE列。     请建议。

下面是相同的替代选择语句。但我不想使用子查询。在Prod的Bcoz我有一张沉重的桌子,我想要应用相同的逻辑。     所以需要使用光标。

select ID,Name,AGE from abc where age in (
SELECT age FROM ABC
GROUP BY AGE
HAVING COUNT(1)>1);

1 个答案:

答案 0 :(得分:1)

  

但我不想使用子查询。在Prod的Bcoz我有一张沉重的桌子   在哪里我想应用相同的逻辑。所以需要使用光标。

为什么假设在PL / SQL块中显示的循环CURSOR比简单的select语句有效?

我可以使用COUNT分析函数将此查询作为子查询选择的另一种替代方法。

SELECT ID
    ,Name
    ,AGE
FROM (
    SELECT a.*
        ,COUNT(*) OVER (PARTITION BY AGE) AS c
    FROM abc a
    ) where c > 1;

如果您仍想使用循环在PL / SQL中应用相同的逻辑,只有在执行任何DML(INSERTUPDATE等动态DDL等时才执行此操作。否则,纯sql使用select选择或单个open cursor就足以显示输出或将CURSOR传递给外部应用程序。