首页 > 解决方案 > PLSQL 中是否允许使用 LPAD?

问题描述

我有一个 PL/SQL 脚本,其中有一个名为 v_credit_hours 的变量,它是一个数字数据类型。我从游标中获取我的字段并将它们插入到一个表中,其中 credit_hours 字段也是一个数字。我需要用前导零填充 v_credit_hours 并在插入之前以四位数结尾。所以 50 小时应该像 0050。我在插入语句之前有这一行。

v_credit_hours := LPAD(ROUND(v_credit_hours), 4, 0);

问题是它不会改变任何东西。50 仍然显示为 50。如果我将 4 更改为 10 或完全删除 LPAD,则不会发生任何事情。我尝试在 ROUND 内将 v_credit_hours 更改为 v_credit_hours * 8,这改变了结果。就好像 Oracle 只是忽略了 LPAD。这个查询结果很好,但当我使用 PL/SQL 时就不行了。我还尝试在 LPAD 和 ROUND 之间添加 TO_CHAR,但这没有任何作用。

SELECT LPAD(ROUND(50), 4, 0) FROM dual;

我不能以这种方式使用 LPAD 吗?我可以在我的原始光标中完成它,但我真的只想在最终输出中看到前导零。

标签: oracleplsql

解决方案


很难判断 v_credit_hours 是作为数字还是 Varchar 输入的。但是,如果你这样做,你会得到你想要的。

 DECLARE
 v_formatted_credit_hours  varchar2(60);

BEGIN 

 SELECT lpad(round(50),4,0)
 INTO v_formatted_credit_hours
 FROM dual ;

SYS.dbms_output.put_line( v_formatted_credit_hours) ;

END;

希望这有助于对您的问题有所了解。


推荐阅读