Oracle環境。創建或替換並解析Java源代碼,我無法使用Java源代碼創建一個函數
下面的Java源已被正確編譯:
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED hr.roman
AS package Package.NumeriRomani;
class Numero{
String r="";
int a=0;
Numero(int n){
a=n;
if(n==0){
r="NULL";
return;}
while(n>=1000){
r+="M";
n-=1000;}
if(n>=900){
r+="CM";
n-=900;}
while(n>=500){
r+="D";
n-=500;}
if(n>=400){
r+="CD";
n-=400;}
while(n>=100){
r+="C";
n-=100;}
if(n>=90){
r+="XC";
n-=90;}
while(n>=50){
r+="L";
n-=50;}
if(n>=40){
r+="XL";
n-=40;}
while(n>=10){
r+="X";
n-=10;}
if(n>=9){
r+="IX";
n-=9;}
if(n>=5){
r+="V";
n-=5;}
if(n==4){
r+="IV";
n-=4;}
while(n>=1){
r+="I";
n--;}
}//Numero(int)
Numero(String k){
int vCor,vNext;
r=k;
for(int i=0;;i++){
vCor=valore(k.charAt(i));
if(i==k.length()-1){
a+=vCor;
break;}
vNext=valore(k.charAt(i+1));
if(vCor>=vNext)
a+=vCor;
else
a-=vCor;
}
}
static public int valore(char c){
switch(c){
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
public int getArabo(){
return a;
}
public String getRomano(){
return r;
}
}
/
我想創造一個getArabo功能和getRoman功能,但我總是收到錯誤。
我曾嘗試用:
CREATE OR REPLACE FUNCTION hr.converti (alfa IN varchar2)
RETURN VARCHAR2
AS
LANGUAGE JAVA
NAME 'ROMAN.getArabo(java.lang.String) return java.lang.String';
/
,但我收到的錯誤:
select hr.converti('XII') from dual;
ORA-29540:ROMAN類不存在
我怎麼能解決這個問題?
什麼是TO_CHAR(2013年, 'RN')的反命令?如何從MMXIII開始回到阿拉伯數字?來自DUAL的SELECT TO_NUMBER('MMXIII','NR')不起作用。 – UltraCommit 2013-03-06 14:51:46
@UltraCommit你說得對,它似乎只能單向工作! – 2013-03-06 15:01:28
我遇到糾正我的來源的問題,請問您能幫我些忙嗎? – UltraCommit 2013-03-06 15:03:32