【问题标题】:How to combine two cursors in DB2如何在 DB2 中组合两个游标
【发布时间】:2017-08-02 03:39:29
【问题描述】:

我有两个光标如下:

EXEC SQL                                      
     DECLARE C1 CURSOR FOR               
     SELECT  DISTINCT FIELD_1                  
     FROM    TABLE                  
     WHERE   FIELD_2 BETWEEN :MAX_DATE
                        AND '9999-12-31'      
           AND   FIELD_3 =  :VALUE 
     WITH UR                                  
     FOR FETCH ONLY                           
END-EXEC

EXEC SQL                                      
     DECLARE C2 CURSOR FOR               
     SELECT  DISTINCT FIELD_1                  
     FROM    TABLE                  
     WHERE   FIELD_2 BETWEEN :MIN_DATE
                        AND '9999-12-31'      
           AND   FIELD_3 =  :VALUE 
     WITH UR                                  
     FOR FETCH ONLY                           
END-EXEC 

两个光标都指向同一个表。如何组合两个光标?请让我知道一种组合这两个表的方法。

【问题讨论】:

  • 你说“cobine”这两个光标是什么意思?你想要两个结果集的并集吗?还是路口?还是别的什么?
  • 像使用两个光标一样,我们可以使用一个光标
  • 这取决于你想做什么。您可以结合 WHERE 子句。

标签: sql select db2 multirow


【解决方案1】:

如果您只想组合两个游标的谓词,当然可以。结合WHERE 子句:

EXEC SQL                                      
     DECLARE C1 CURSOR FOR               
     SELECT  DISTINCT FIELD_1                  
     FROM    TABLE                  
     WHERE   FIELD_2 BETWEEN :MIN_DATE
                        AND :MAX_DATE
           AND   FIELD_3 =  :VALUE 
     WITH UR                                  
     FOR FETCH ONLY                           
END-EXEC

您在问题中的示例的最小值和最大值都在 9999-12-31 的范围内,这对我来说没有意义。

【讨论】:

  • 'DISTINCT' 执行时间过长。我们可以使用其他任何东西来代替“DISTINCT”,这样我们就可以节省 CPU 时间和成本。
  • 我有一个像这样的游标,带有'DISTINCT'子句。在 Open Cursor 语句中执行此游标需要更多时间。请告诉我优化的方法。我可以在这里使用“ORDER BY”或“GROUP BY”吗
  • EXEC SQL DECLARE CSR CURSOR FOR SELECT DISTINCT A.FIELD1 ,C.FIELD2 FROM TABLE1 A ,TABLE2 B ,TABLE3 C WHERE A.FIELD3= :VALUE....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2013-11-16
  • 2021-08-29
  • 2017-10-10
  • 1970-01-01
  • 2017-11-10
相关资源
最近更新 更多