gpt4 book ai didi

java - 创建或替换并解析 Java 源代码,我无法使用 Java 源代码创建函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:11 25 4
gpt4 key购买 nike

Oracle 环境。

以下 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 类不存在

我该如何解决这个问题?

最佳答案

为了能够使用这个 java 类,您需要更正以下内容:

  1. 使用静态方法以便无需对象实例化即可从 Oracle 调用它们
  2. 您的源代码名为 ROMAN,但您的类名为 Numero。从 Oracle 调用它时,您将引用该类。 为类和源提供相同的名称可以防止混淆。
  3. java 是强类型的,您不能将方法 int getArabo() 转换为:

    getArabo(java.lang.String) return java.lang.String

这是一个工作示例:

SQL> CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Roman" AS
2 class Roman {
3 public static int getArabo(java.lang.String x){
4 return 0;
5 }
6 }
7 /

Java created

SQL> CREATE OR REPLACE FUNCTION converti (alfa IN varchar2)
2 RETURN NUMBER
3 AS LANGUAGE JAVA NAME 'Roman.getArabo(java.lang.String) return int';
4 /

Function created

SQL> select converti ('aaa') from dual;

CONVERTI('AAA')
---------------
0

此外,您可以使用 Oracle 函数将数字转换为其罗马字符值 TO_CHAR (但是TO_NUMBER函数不能用于反向操作):

SQL> SELECT to_char(2013, 'RN') FROM dual;

TO_CHAR(2013,'RN')
------------------
MMXIII

关于java - 创建或替换并解析 Java 源代码,我无法使用 Java 源代码创建函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15249424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com