2012-08-10 55 views
0

我有一个oracle报告,显示一组值,它可以生成pdf和csv格式。 我必须确保这些值始终显示最多3位小数。那就是:在Oracle报告中编辑列的值

0.1 --> 0.100 
0.01 --> 0.010 
0 --> 0.000 

Excel中犯规考虑trainling零,所以我用下面的代码制作Excel中显示所有3位小数:

select '="'||to_char(value,'90.999')||'"' from table1; 
--The column is declared as NUMBER(10,3) in the table 

现在的数字显示了在Excel中根据需要,但在pdf格式显示,如:=“0.000”

任何人都可以请告诉我如何使它在pdf和csv格式一致?

+0

首先,仅仅是明确的,这就是你在Oracle中创建报表报告的产品?不是恰好用于从Oracle数据库生成报告的SQL语句?你使用的是什么版本的Oracle报告?报告中的分发设置是什么? – 2012-08-10 05:12:21

+0

是的!我正在使用sql查询从数据库获取数据并使用纸张布局来生成报告。我正在使用Oracle报告生成器10.1.2 – Haripriyan 2012-08-10 05:56:39

+0

将Oracle报告中的字段的格式掩码设置为“0.000”,然后一旦生成Excel报告,手动设置列格式以显示小数点?甚至perhpas使用自定义的一块VBA自动为你做。 – Ollie 2012-08-10 08:25:50

回答

1

您可以在运行时评估报告的格式参数,并使用DECODE语句或CASE语句来确定列的哪种输出格式/值。

我认为这将实现你正在瞄准的东西。一个结构化的报告使用相同的查询csv或pdf输出。

+0

谢谢。我唯一关心的是性能问题。如果有大约5000个值,那么解码将不得不进行很多次。这不会让事情变慢吗? – Haripriyan 2012-08-10 11:31:16

+0

我怀疑它会对5000行的表产生重大影响。这是(相对)很少的行数。最好的办法是通过解释计划运行查询并在前后比较来进行检查。 – OraNob 2012-08-13 08:56:42

-1

在我的项目我尝试以下方法,

  IF :DESFORMAT='SPREADSHEET' THEN 
        :CP_2:= '="'||:cmdt_grp_cd||'"'; 
      ELSE 
        :CP_2:=:cmdt_grp_cd; 
      END IF;