【问题标题】:Need PL/SQL block to retrieve data as per my requirement根据我的要求需要 PL/SQL 块来检索数据
【发布时间】:2018-05-02 15:21:12
【问题描述】:

我有一张桌子 ABC。在这个表中,基于 AGE,我需要找到 Duplicates,对于那些重复的记录,我需要在 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;

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

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

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

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

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

    为什么您认为循环通过CURSOR 以显示在 PL/SQL 块中比简单的选择语句更有效?

    我可以使用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 的 987654326@ 足以显示输出或将 CURSOR 传递给外部应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2019-05-29
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多