CREATE OR REPLACE FUNCTION UF_CHINA_AMT(v_cAmt Number) Return VarChar2 
AS
v_sTempAmt VarChar2(60);
v_sAmt VarChar2(60);
v_sTemp VarChar2(20)
v_sDec VarChar2(20);
v_sChar VarChar2(1);
v_sConvert_char VarChar2(2); 
v_sConvert_unit VarChar2(2);
v_cLen_new Number;
v_sChar_new VarChar2(2);
v_sChar_old VarChar2(2);BEGIN
Select To_Char(Trunc(v_cAmt)),
Length(To_Char(Decode(Trunc(v_cAmt),0,Null,Trunc(v_cAmt)))),
Decode(Instr(To_Char(v_cAmt),'.',1),0,Null,
SubStr(To_Char(v_cAmt),Instr(To_Char(v_cAmt),'.',1) + 1))
Into v_sTemp,v_cLen_new,v_sDec
From Dual; 
If v_cLen_new > 0 Then
While v_cLen_new > 0
Loop
v_sChar := Substr(v_sTemp,1,1);
Select Decode(v_sChar,'0','零','1','壹','2','贰','3','叁','4','肆',
'5','伍','6','陆','7','柒','8','捌','9','玖'),
Decode(v_cLen_new, 1,'圆',2,'拾',3,'佰',4,'仟',
5,'万',6,'拾',7,'佰',8,'仟',
9,'亿',10,'拾',11,'佰',12,'仟',13,'兆'),
Substr(v_sTemp,2),
Length(Substr(v_sTemp,2))
Into v_sConvert_char,
v_sConvert_unit,
v_sTemp,
v_cLen_new
From Dual;
v_sTempAmt := v_sTempAmt || v_sConvert_char || v_sConvert_unit;
End Loop;
While Length(v_sTempAmt) > 0
Loop
v_sChar_new := Substr(v_sTempAmt,1,1); 
v_sConvert_unit := Substr(v_sTempAmt,2,1);
If v_sChar_new = '零' Then
If v_sConvert_unit = '万' Or v_sConvert_unit = '亿' Then 
If v_sChar_new = v_sChar_old Then
v_sAmt := SubStr(v_sAmt,1,Length(v_sAmt)-1);
End If;
v_sAmt := v_sAmt || v_sConvert_unit;
Else 
If v_sChar_new <> v_sChar_old Then
v_sAmt := v_sAmt || '零';
Else
v_sConvert_unit := SubStr(v_sAmt,Length(v_sAmt));
If v_sConvert_unit = '万' Or v_sConvert_unit = '亿' Or v_sConvert_unit = '兆' Then
v_sAmt := v_sAmt || '零';
End If; 
End If; 
End If;
Else
v_sAmt := v_sAmt || Substr(v_sTempAmt,1,2);
End If;
v_sChar_old := v_sChar_new;
v_sTempAmt := Substr(v_sTempAmt,3);
End loop;
v_sTempAmt := v_sAmt;
v_sAmt := '人民币';
v_sChar_old := '';
While Length(v_sTempAmt) > 0
Loop
v_sChar_new := Substr(v_sTempAmt,1,1);
If (v_sChar_new = '万' Or v_sChar_new = '亿' Or v_sChar_new = '兆') And
(v_sChar_old = '万' Or v_sChar_old = '亿' Or v_sChar_old = '兆') Then
v_sAmt := v_sAmt;
Else 
v_sAmt := v_sAmt || Substr(v_sTempAmt,1,1);
End If;
v_sChar_old := v_sChar_new;
v_sTempAmt := Substr(v_sTempAmt,2);
End Loop;
End If;v_sTempAmt := Null; 
If v_sDec Is Not Null Then
v_cLen_new := Length(v_sDec);
For v_cIndex in 1..v_cLen_new
Loop
Select Decode(Substr(v_sDec,1,1),'0','零','1','壹','2','贰','3','叁',
'4','肆','5','伍','6','陆','7','柒',
'8','捌','9','玖'),
Decode(v_cIndex, 1,'角',2,'分'),
Substr(v_sDec,2)
Into v_sConvert_char,
v_sConvert_unit,
v_sDec
From Dual;
If v_cIndex = 1 Then
If v_sConvert_char = '零' Then
v_sTempAmt := '零';
Else
v_sTempAmt := v_sConvert_char || v_sConvert_unit;
End If; 
Else
If v_sConvert_char <> '零' Then
v_sTempAmt := v_sTempAmt || v_sConvert_char || v_sConvert_unit;
End If;
End If; 
End Loop;
End If;If Length(v_sAmt) > 0 Then
If Substr(v_sAmt,Length(v_sAmt)) = '零' Then
v_sAmt := Substr(v_sAmt,1,Length(v_sAmt)-1) || '圆'; 
End If;
If Length(v_sTempAmt) > 0 Then
v_sAmt := v_sAmt || v_sTempAmt || '整';
Else
v_sAmt := v_sAmt || '整';
End If;
Else
If Length(v_sTempAmt) > 0 Then
v_sAmt := '人民币' || v_sTempAmt || '整';
Else
v_sAmt := '人民币零圆整';
End If;
End If;
Return v_sAmt;
END UF_CHINA_AMT;
我想问下  这是PL/SQL语言吗    这段代码完成什么功能呢    很不熟悉