2010-01-13 61 views
0

过去几天我一直在为此工作,我找不到出路。我有一个需要在屏幕上打印报告的C#Web应用程序。这个相同的应用程序在数据库(Oracle)上调用存储过程并返回一个游标。这是程序光标返回多行

PROCEDURE report_total(beginDate IN DATE, endDate IN DATE, c OUT REF CURSOR) 
AS 
BEGIN 
    OPEN 
     c 
    FOR 
     SELECT 
      month 
      ,sum(field1) 
      -- + a lot of other fields 
     FROM 
      view1 v 
     WHERE 
      beginDate <= v.date 
      AND v.Date < endDate 
     GROUP BY 
      month 
END; 

这工作正常,它给了我每月的field1(和其他)的总和。假设你至少输入一个完整的年份范围,最多可以输入12行。 Howhever。我想制作一些类似的存储过程,这些存储过程会给我这些月份的细节。假设beginDate ='2003-01-01'和endDate ='2005-01-05'(YYYY-MM-DD),我需要25行。每月一次,每年一次。我想用光标OUT得到这些结果。如果你有一个不涉及游标的最简单的想法,请给我建议。

+1

你能告诉我一个你有什么和你想要什么的例子吗?也许它只是我,但从你的问题的措辞,我无法辨别两者之间的差异。 – Melvin

+0

一个总是返回12行,另一个必须返回(12 *年数)行 – ALOToverflow

回答

0
SELECT TRUNC(v.date, 'MONTH'), SUM(field1) 
FROM view1 v 
WHERE v.date BETWEEN beginDate and endDate 
GROUP BY 
     TRUNC(v.date, 'MONTH') 
+0

非常感谢。 – ALOToverflow