oracle统计存储

最近在搞oracle存储过程,主要是对以前项目的一个统计的维护,库和表已不能在优化,每天也会有新数据入库,加索引不符合实际,现在只能采用存储过程,因为自己对这一块不是很了解,上头也在催,希望各位牛人帮忙写一下,小弟不胜感激:现在那个建表语句我已给出(table2.sql),还有就是统计的sql也给出了(count.txt)

这里的SYS_CURSOR是Oracle内置的游标类型,在java中对应的是oracle.jdbc.OracleTypes.CURSOR类型,下面是个java调用的例子:

java中调用,并处理:
[code="java"]CallableStatement cstmt = null;
ResultSet rs = null;
try {
String callSql = "{? = call AAAAA(?)}";
cstmt = conn.prepareCall(callSql);

cstmt.setString(2, "userName");

cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

cstmt.execute();

rs = (ResultSet) cstmt.getObject(1); //直接当做ResutlSet类型来处理
if (rs != null) {
System.out.print("usercd");
System.out.print("userName");

System.out.println("EMAIL");
while (rs.next()) {

System.out.print(rs.getString(1)+" ");
System.out.print(rs.getString(2)+" ");

System.out.println(rs.getString(3));
}

}
[/code]

第一个sms的应该是这么写的,其他的也跟这个类似,你自己写就可以了,
[code="java"]CREATE OR REPLACE PROCEDURE SMS_COUNT(out_cursor OUT SYS_REFCURSOR)
IS
v_sql VARCHAR2(200);
BEGIN
v_sql:='select to_char(tt.send_time,''yyyy-mm-dd''),message,'+
'sum(decode(send_state, ''1'', 1, 0)),'+
'sum(decode(send_state, ''1'', 0, 1)),'+
'sum(decode(receipt_state, ''1'', 1, 0)),'+
'sum(decode(receipt_state, ''2'', 1, 0)),'+
'sum(decode(receipt_state, null, 1, '''', 1, 0)) +'
'from gw_sms_send_log tt '+
'where to_char(tt.send_time, ''yyyy-mm-dd'') >=''2011-11-14''+
'group by message,to_char(tt.send_time, ''yyyy-mm-dd'')'+
'order by sum(decode(send_state, ''1'', 1, 0)) desc';
OPEN out_cursor FOR v_sql;
END;[/code]

CREATE OR REPLACE PROCEDURE SMS_COUNT(out_cursor OUT SYS_REFCURSOR) 这里面的out_cursor OUT SYS_REFCURSOR表示的就是返回值,OUT就表示的是输出参数,你可以写多个这样的输出参数就表示多个返回值。