|
CREATE OR REPLACE FUNCTION C_word_Format (WK_AMT VARCHAR2) RETURN VARCHAR2 IS
tp_string1 varchar2(40);
tp_string2 varchar2(40);
tp_string3 varchar2(40);
L_N NUMBER(2);
L_N1 NUMBER(2);
L_N2 NUMBER(2);
L_N3 NUMBER(2);
T_N NUMBER(2);
WK_STRING VARCHAR2(80);
WK_STRING1 VARCHAR2(80);
WK_AMT1 VARCHAR2(80);
wk_amt2 number(30);
--
BEGIN
WK_AMT2:= to_number(WK_AMT);
tp_string1 := '億萬元';
tp_string2 := '拾佰仟';
tp_string3 := '壹貳參肆伍陸柒捌玖';
--
L_N := LENGTH(TO_CHAR(ROUND(TO_NUMBER(WK_AMT))));
L_N1 := MOD(L_N,4);
IF TO_NUMBER(WK_AMT) = 0 THEN
WK_STRING := '零元整';
ELSE
wk_string := '整';
END IF;
WK_AMT1 := LPAD(WK_AMT,(L_N-L_N1+4),'X');
L_N2 := 0;
LOOP
EXIT WHEN TO_NUMBER(WK_AMT) = 0 OR (L_N2 > ((L_N - L_N1) / 4) And (l_n1 <> 0)) or
(L_N2 > ((L_N - L_N1 - 4) / 4) and (L_n1 = 0));
--
IF (substr(WK_STRING,1,1) <> '萬') THEN
WK_STRING := substr(tp_string1,3-l_n2,1)||WK_STRING;
ELSE
WK_STRING := substr(tp_string1,3-l_n2,1)||
substr(WK_STRING,2,l_n-1);
END IF;
--
L_N3 := 1;
LOOP
EXIT WHEN (L_N3 > 4 OR
SUBSTR(WK_AMT1,LENGTH(WK_AMT1)-(L_N2*4+L_N3-1),1) = 'X');
--
If SUBSTR(WK_AMT1,LENGTH(WK_AMT1)-(L_N2*4+L_N3-1),1) <> '0' then
--
If L_n3 in (2,3,4) then
WK_STRING := substr(tp_string2,l_n3-1,1)||wk_string;
end if;
--
WK_STRING :=
substr(tp_string3,
to_number(
SUBSTR(WK_AMT1,LENGTH(WK_AMT1)-
(L_N2*4+L_N3-1),1)
),1)||WK_STRING;
--
else
IF substr(wk_string,1,1) in
('壹','貳','參','肆','伍','陸','柒','捌','玖') then
WK_STRING := '零'||wk_string;
end if;
end if;
L_N3 := L_N3 + 1;
END LOOP;
L_N2 := L_N2 +1;
END LOOP;
RETURN(WK_STRING);
Exception
when Value_Error then
dbms_output.put_line('Invalide Number Input');
RETURN(WK_amt);
when others then
dbms_output.put_line('Some Other errors');
return(Wk_Amt);
END;
/ |
|