如何在PL/SQL中始终显示数字的两位小数

如何在PL/SQL中始终显示数字的两位小数,sql,oracle,plsql,number-formatting,Sql,Oracle,Plsql,Number Formatting,各位 我有一个现有的存储过程,我正在尝试更新它,以始终显示两位小数,即使它是一个整数或一位小数 此存储过程生成一条消息,必须将v_credit_amt显示为两位小数,但分配给v_credit_amt的值可以是整数,也可以是单位小数或两位小数 i、 e.175应显示为175.00,250.5应显示为250.50,395.95应显示为395.95 下面是相关的股票pl/sql v_credit_amt number(22,2); select NVL(sit_credit_limit,

各位

我有一个现有的存储过程,我正在尝试更新它,以始终显示两位小数,即使它是一个整数或一位小数

此存储过程生成一条消息,必须将
v_credit_amt
显示为两位小数,但分配给
v_credit_amt
的值可以是整数,也可以是单位小数或两位小数 i、 e.175应显示为175.00,250.5应显示为250.50,395.95应显示为395.95

下面是相关的股票pl/sql

v_credit_amt        number(22,2);
select NVL(sit_credit_limit,0)
  into v_credit_amt
  from sites
 where sit_pkey = p_site_id;
我认为在select过程中通过格式化to_char可以解决这个问题,ala

select NVL(to_char(sit_credit_limit, 'fm99999.00'),0)
  into v_credit_amt
  from sites
 where sit_pkey = p_site_id;

--v_credit_amt := to_char(v_credit_amt, 'fm99999.00');
insert into SQL_TXT values (v_credit_amt);
commit;
正如您可以从上面注释掉的行中看到的,一旦定义了v_credit_amt变量,我也尝试过它

我也尝试过使用to_number函数

select NVL(to_number(sit_credit_limit, '99999.00'),0)
  into v_credit_amt
  from sites
 where sit_pkey = p_site_id;
但是,如果存储在sit_credit_limit列中的值是一个不带小数的整数,或者像250.5
v_credit_amt
这样的数字,则在查询我插入以进行调试的SQL_TXT表时,在所有情况下都显示相同的值

SQL> select * from SQL_TXT;

COL1
--------------------------------------------------------------------------------
175
250.5
这个特定事件只是将多个消息部分连接成一个返回的长消息字符串,即

if p_message_id = '14' then
   v_message := 'Comtrol Check In Message Posted';
   v_string  := v_string || '008' || lpad(length(v_fname || ' ' || v_lname), 3, '0') || v_fname || ' ' || v_lname;
   v_string  := v_string || '059' || lpad(1, 3, '0') || '0';
   --v_string  := v_string || '089' || lpad(1, 3, v_credit_amt) || to_char(v_credit_amt);
   v_string  := v_string || '089' || lpad(length(to_char(v_credit_amt, 'fm9999999.00')), 3, '0') || to_char(v_credit_amt, 'fm9999999.00');
   v_string  := v_string || '106' || lpad(length(nvl(v_acct_number,'')), 3, '0') || v_acct_number;
   --v_string  := v_string || '106' || v_acct_number;
   v_string  := v_string || '164' || lpad(1, 3, '0') || '0';
   v_string  := v_string || '174' || lpad(length(v_rm_phone_num), 3, '0') || v_rm_phone_num;
   v_string  := v_string || '175' || lpad(length(v_rm_id), 3, '0') || v_rm_id;
   v_string  := v_string || '183' || lpad(1, 3, '0') || '0';
endif;
然而,我不能让最后的字符串在所有用例中都有两个小数

例如,如果db中的值是125,我得到最后一个字符串

1444500346299909008009Bob Smith05900100{89006125}10600733075421600017400340917500
3409183010

无论如何,它本该如此

14445003462999008009Bob Smith05900100{89007125.00}1060073307543216400107400340917500
3409183010

很抱歉上面的格式设置,我看不到如何在没有代码块的情况下加粗部分,所以我突出显示了相对部分{}


如果我需要始终显示两位小数的数字,即使给定了整数值或1位小数,我还缺少什么?

实际上,您必须插入带有格式的数据。(假设目标列是
VARCHAR
)获取并放入
NUMBER
变量的任何格式都将是
NUMBER

数字毕竟没有要保存的格式。只有用于显示时,格式才会显示在图片中

insert into SQL_TXT values (TO_CHAR(v_credit_amt,'FM99999.00'));
commit;
如果插入的列再次为
NUMBER

你还想和我一起去吗

SELECT TO_CHAR(COL1,'FM99999.00') FROM SQL_TEXT;

用更多信息更新了原始问题。实际上,我需要从数据库中获取数字,并将其作为字符串保存到变量中,该字符串始终包含两个小数,因为该过程返回的是将多个字符串串联成单个字符串。数据库中没有最后的插入,它只是格式化数据并返回数据。@Jchieppa。您的问题陈述无效。@Jchieppa我想唯一的可能性是,您可能执行的代码版本没有
TO_CHAR()
,您在这里注释了。