如何在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.5v_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()
,您在这里注释了。