现在有这样一个需求,在一个系统中有多张报表(报表1、2……N),系统远行的过程中可能会有多个用户同时请求(不)同的报表,即并发请求产生报表。
现在我的想法是:
完全用Oracle的储存过程去实现这些报表,生成的报表数据放到一个特定结构①的表中,然后在Web中向此表请求数据生成页面。
现在问题是怎么控制并发,使此表中的是某一请求的完整报表数据。会不会在此结构表中Insert进去两张Or两张以上报表的数据?如果会出现这种情况用什么办法去控制Or怎么样去定义这个表的结构。
①. 表结构
CREATE TABLE reportStructrue(
TYPE VARCHAR(2),
COL1 VARCHAR(60),
COL2 VARCHAR(60), 
COL3 VARCHAR(60), 
COL4 VARCHAR(60),
COL5 VARCHAR(60), 
COL6 VARCHAR(60), 
COL7 VARCHAR(60), 
COL8 VARCHAR(60), 
COL9 VARCHAR(60)
)
TYPE表示该行数据类型,如:0表示该行数据为报表名
1表示该行为表头
2表示该行数据为报表数据
3表示该行数据每列为上面相应列数据的一个合计量
4表示该行数据每列为上面相应列数据的一个平均量
……
INSERT INTO reportStructrue(TYPE,COL1) VALUES('0','TEST REPORT');
INSERT INTO reportStructrue(TYPE,COL1,COL2,COL3,COL4) VALUES('1','CLASS','STUDENT NAME','CHINESE','ENGLISH');
INSERT INTO reportStructrue(TYPE,COL1,COL2,COL3,COL4) VALUES('2','1','LI','60','80');
INSERT INTO reportStructrue(TYPE,COL1,COL2,COL3,COL4) VALUES('2','1','ZHANG','60','80');
INSERT INTO reportStructrue(TYPE,COL1,COL2,COL3,COL4) VALUES('4','','','60','80');

解决方案 »

  1.   

    --在报表reportStructrue中增加两个字段:start_date(开始日期)和end_date(结束日期)
    --或者:start_datetime(开始时间)和end_datetime(结束时间)--是精确到天还是秒依据应用而定。--然后引用方法如下:
    select reportStructrue from table_test
           where to_char(start_date,'yyyymmdd')>=:v_1 and 
                 to_char(start_date,'yyyymmdd')<=:v_2;--或者使用此方法查询提供数据的任一表(table)。
      

  2.   

    那你就为某一请求都设置一个标识,
    在结构表①中增加一个字段,叫请求序列号,使用sequence产生该值.
      

  3.   

    使用临时表进行增删,可参考热贴:http://topic.csdn.net/u/20081102/11/d9f22879-a5c7-412d-ac24-2698f20ce217.html