2016-10-13 2 views
0

내 패키지에서 숫자를 단어로 변환하는 PL/SQL 함수를 작성하려고합니다.숫자를 PL/SQL 단어로 변환하는 함수

내 기능 : 나는 이러한 오류를 돌봐하거나 심지어 더 나은 더 제안 할 방법을 모르는

Error: PL/SQL: Statement ignored

Error: PLS-00306: wrong number or types of arguments in call to 'REPLACE'

: 다음과 같은 오류가 나에게 제공

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; 

심미적 기능 스타일은 동일한 결과를 얻을 수 있습니다. 예 :

f_numbertoword(123); 

결과 :

'one two three'

감사

답변

1

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; 
+0

위대한, 고마워요 @ 코도 –

0

은 또한 당신은뿐만 아니라이 방법으로 사용할 수 있습니다

CREATE OR REPLACE FUNCTION f_numbertoword(pn_number NUMBER) RETURN VARCHAR2 IS 
    f_numbertoword VARCHAR2(500):= null; 
    v_len number; 
    v_num number; 
    v_name varchar2(100); 

BEGIN 

    v_len:= length(pn_number); 

    for i in 1..v_len 
    loop 
    v_num := substr(pn_number,i,1); 

    --dbms_output.put_line(v_num); 

    v_name := case when (v_num = 0) THEN 
         'zero' 
         when (v_num = 1) THEN 
         'one' 
         when (v_num = 2) THEN 
         'two' 
         when (v_num = 3) THEN 
         'three' 
         when (v_num = 4) THEN 
         'four' 
         when (v_num = 5) THEN 
         'five' 
         when (v_num = 6) THEN 
         'six' 
         when (v_num = 7) THEN 
         'seven' 
         when (v_num = 8) THEN 
         'eight' 
         when (v_num = 9) THEN 
         'nine' 
        end; 

    f_numbertoword:=f_numbertoword||' '|| v_name;    

    end loop;    

RETURN f_numbertoword; 
END; 

출력을

SQL> select f_numbertoword(9) from dual; 

F_NUMBERTOWORD(123) 
-------------------------------------------------------------------------------- 
one two three 
0

오류 메시지는 아주 자명합니다. documentationREPLACE 함수는 두 개 또는 세 개의 인수를 허용합니다. PLS-00306 오류가 발생한 행에서 하나의 인수로 호출합니다.

+0

또한 가장 바깥 쪽 표현식은'(subexpresion, '9', 'nine')이며 의미가 없습니다. – Codo

관련 문제