对不起,我没讲清楚 我的问题,就是,使用游标的时候怎么向游标里“添加”数值有无这种功能(有点类似网页中session变量的数值添加)

解决方案 »

  1.   

    我碰到的问题,目前需要用storeProcedure实现,同时storeProcedure受到限制,如下The procedure can only contain one OUT type parameter, and the data type of the parameter must be "REF CURSOR". If the Procedure doesn't have such a parameter, it can not be added
    into Catalog of JReport because JReport can not create a report without a ResultSet.而我又要对多表(试图查询),举例我有个报表,但是each column的时间受到限制,0-30,31-60,61-90,91-120天,这里我其实仅仅对于一个表查询请问 不用storePrecedure,怎么实现,同时又要受到上述条件的限制。请高手赐教
      

  2.   

    你的问题越说越复杂了,但我还是不太明白,你既然可以用storeProcedure实现,就不用担心返回值的问题,都可以写到临时表中,至于这个临时表的建法,要看你的情况了,如果你在设计时就已经知道结果集的格式,你就可以按照这个格式创建一个Table,然后将数据写入这个Table中,如果结果集不确定,怎么解决?
      首先,设想以下使用动态创建Table,然后记录创建的Table的名称即可,但这种方法好象行不通。
      其次,考虑建一个大表或着说是公共表,例如结构及数据可以如下:
        rows(行数或组数) colu(列名,或变量名) valu(值)
            1               mc                ...
            1               liu               ...
            1               hh                ...
            2               mc                ...
            2               liu               ...
           ...              ...               ...  如果返回结果集类型不一致,则必须要转换,可以使用:to_char,rowidtochar等转换函数实现,如果存在boolean型数据,则不能直接转换,用if判断以下就可以了。
      
      另外,你所说的:“有个报表,但是each column的时间受到限制,0-30,31-60,61-90,91-120天,这里我其实仅仅对于一个表查询”到底是什么意思?
      具我推断,可能有两种情况:(不知是否正确?)
      一、条件组合,例如:
        select ... from .. where (colu1 >= 1 and colu1 <= 30) and (colu2 >= 31 and colu2 <= 60) and ...
        当然也可以使用Between来实现,当然需要计算天数了。
      二、原表结构如下:
          类别      天数      值
           1         2        5
           1        12        2
           1        45        3
           1        80       10
           1       100        1
           2        15        4
           2        45        3
           2        71        8
           2        95        9
          ...
        你希望的结果如下:
          类别   0-30   31-60   61-90   91-120
            1      7       3      10      1
            2      4       3       8      9
           ...
        这种情况可以用Decode()函数来实现,当然肯定不能写30个值了,你计算以下,用 SIGN(天数 - 30),SIGN(天数 - 60),...这样只需判断 -1就可以了,当然也可以用 TRUNC((天数 -1) / 30 , 0),这样结果为0,1,2,3 ...分别代表0-30,31-60,61-90,91-120 ...  最后说明,最好不要关联太多的表,这样绝对会降低工作效率的,如果真如你所说,需要太多的关联的话,你可以设法将其分成若干块,然后保存为临时表,再对临时表查询,这样也许会快些。我知道有一种语法:Create table ... Select...,但具体怎么用,记不太清了,另外可能不能写在Procedure中,你可以试试,但要记着,动态创建的表需要动态删除,否则你在管理上可能会出现混乱。
      

  3.   

    谢谢楼上的建议,如何加分,我还不会,请提个醒。对于你的方法,我有写明白,但是还是不太理解,尤其是“这种情况可以用Decode()函数来实现,当然肯定不能写30个值了,你计算以下,用 SIGN(天数 - 30),SIGN(天数 - 60),...这样只需判断 -1就可以了,当然也可以用 TRUNC((天数 -1) / 30 , 0),这样结果为0,1,2,3 ...分别代表0-30,31-60,61-90,91-120 ...”这段话。我现在所谓的多列,单表的问题如下。
    我要查询的显示,数据来自同一个表,但是列值要求表是不同的数值,他们仅存在时间要求的差异(0-30,31-60,……),开始我想通过存储过程(传递参数)返回多值的方法,这样就避免了建立临时表格,但是由于我使用的开发报表工具的限制,我必须按照你所说的建立临时表。谢谢你给我的提示,其实我是想找一个偷懒的方法,但是最好还要去做实际的行动,谢谢。还是那句话,怎么给你分呢?
      

  4.   

    你的最后的意见我肯定会注意,但是我开发时间不长,可能要先建立表和视图的方法,处理,后期在按照你的提示做,我用的开发工具是erwin 。再次感谢
      

  5.   

    不是不建,是程序两很大,头一个report,我的临时表,就有,13个,代码就上千行,我第一步,是为了 把分成细节,遍于发现错误