将数字转换为单词PL / SQL的函数

时间:2016-10-13 06:57:41

标签: oracle plsql sql-function

在我的程序包中,我尝试编写一个将数字转换为单词的PL / SQL函数。

我的功能:

FUNCTION f_numbertoword(pn_number NUMBER) RETURN VARCHAR2 IS
  f_numbertoword VARCHAR2(34);
BEGIN
f_numbertoword := (                      <-- Here the 'Statement Ignored' error is raised
  REPLACE(
    REPLACE(
      REPLACE(
        REPLACE(
          REPLACE(
            REPLACE(
              REPLACE(
                REPLACE(
                  REPLACE(
                    REPLACE(pn_number),  <-- Here the PLS-00306 error is raised
                    '0','zero '),
                  '1','one '),
                '2','two '),
              '3','three '),
            '4','four '),
          '5','five '),
        '6','six '),
      '7','seven '),
    '8','eight '),
  '9','nine ');
RETURN f_numbertoword;
END;

这给我提供了以下错误:

  

错误:PL / SQL:忽略语句

     

错误:PLS-00306:调用的参数的数量或类型错误   &#39; REPLACE&#39;

我不知道如何处理这些错误,或者你甚至建议一种更好,更美观的功能风格来达到相同的效果。例如

f_numbertoword(123);

返回:

  

&#39;一二三&#39;

由于

3 个答案:

答案 0 :(得分:0)

或者您也可以使用这种方式:

{{1}}

输出

{{1}}

答案 1 :(得分:0)

错误消息非常明显。根据{{​​3}},REPLACE函数接受两个或三个参数。在引发PLS-00306错误的行上,您使用一个参数调用它。

答案 2 :(得分:0)

REPLACE和括号的嵌套无效。修复如下:

FUNCTION f_numbertoword(pn_number NUMBER) RETURN VARCHAR2 IS
  f_numbertoword VARCHAR2(34);
BEGIN
f_numbertoword := REPLACE(
  REPLACE(
    REPLACE(
      REPLACE(
        REPLACE(
          REPLACE(
            REPLACE(
              REPLACE(
                REPLACE(
                  REPLACE(pn_number,
                    '0','zero '),
                  '1','one '),
                '2','two '),
              '3','three '),
            '4','four '),
          '5','five '),
        '6','six '),
      '7','seven '),
    '8','eight '),
  '9','nine ');
RETURN f_numbertoword;
END;