需要帮助将值插入ORACLE 11g表

时间:2014-03-07 13:48:36

标签: sql database oracle oracle11g

这是我的插入声明:

INSERT INTO PRODUCT 
VALUES 
('PROD010', 'Kiwi milk tea', 'A milk tea that made from kiwi powder and other ingredients.', 4.50, 5.00);

但是,屏幕上出现的是PROD010,猕猴桃奶茶,用猕猴桃粉和其他成分制成的奶茶,4.5和5

4.50和5.00的全部零都消失了。

那么,我现在该怎么办才能显示所有零?

产品代码表:

    CREATE TABLE PRODUCT(
    PROD_ID         VARCHAR(10) NOT NULL,
    PROD_NAME       VARCHAR(30),
    PROD_DESC       VARCHAR(70),
    R_UNIT_PRICE    NUMBER(3,2),
    L_UNIT_PRICE    NUMBER(3,2),
    primary key (PROD_ID)
    );     

2 个答案:

答案 0 :(得分:2)

表格中没有任何内容可以让客户端显示尾随,无关紧要的零。 (至少在保持数字的同时;不要考虑将其存储为字符串)。数值以有效的内部格式存储。当客户端检索该值时,它将转换为客户端的natice数字格式,客户端决定如何显示它。

要在SQL * Plus等客户端中显示零,包括0.00,您可以将其作为字符串检索:

select prod_id, prod_name, prod_desc,
  to_char(r_unit_price, '0.00') as r_unit_price,
  to_char(l_unit_price, '0.00') as l_unit_price
from product;

SQL Fiddle demo

除非客户端应用程序执行自己的格式化,否则您需要在每个重要的查询中执行此操作。当您在计算中使用该值时,请将其作为数字使用,并将格式模型应用于最终的失败结果 - 否则您将在字符串之间进行无意义的隐式转换,并且错误的可能性。

您的数据类型非常严格 - 您的值不能超过10或更高。这可能是你想要的,但要查看Mihai所链接的精确度和尺度信息。

答案 1 :(得分:0)

select num, length(num) len, instr(num,separator) dot
      ,case when instr(num,separator) > 0 then length(num) - instr(num,separator) else 0 end as dot2
      ,case when instr(num,separator) > 0 then rpad(num,instr(num,separator)+2,0) else num||separator||'00' end as num2
  from ( select ',' as separator from dual ) sep,
  ( 
  select 1.21   as num from dual union all
  select 1.2    as num from dual union all
  select 9      as num from dual union all
  select 11.456 as num from dual union all
  select 341.2  as num from dual 
  );

NUM     LEN DOT DOT2    NUM2
1,21    4   2   2   1,21
1,2     3   2   1   1,20
9       1   0   0   9,00
11,456  6   3   3   11,45
341,2   5   4   1   341,20

NUM2就是答案 更改分隔符可以使用逗号或点,具体取决于您的环境。