oracle에 Java 클래스를 함수로로드하려고합니다. 서버에서 나는 다음과 같이 LOADJAVA 사용 관리 : loadjava가 작동하지만 쿼리가 oracle sql 개발자에서 작동하지 않습니다.
C:\Users\n12017>loadjava -user USER1/passw E:\JAVA_repository\SOOSProjects\Mehmet_java_2db_trial\classes\mehmet_java_2db_trial\kondrakk.class
그리고 오라클 DB 측의
: 나는 다음과 같이 쿼리를 적용 할 때create or replace function ngram_kondrakk(src in varchar2, trg in varchar2)
return float
as language java
name 'mehmet_java_2db_trial/kondrakk.getDistance(java.lang.string, java.lang.string) return java.lang.float';
/
그러나, 나는 오류가 발생했습니다. 여기
select ngram_kondrakk('mehmet','mehmet') from dual;
오류입니다 (두 개의 동일한 문자열이 비교되기 때문에 쿼리의 결과로 나는 1의 유사성 점수를 기대하고있다) 마지막으로
ORA-29532: Java call terminated by uncaught Java exception: System error : java/lang/UnsupportedClassVersionError
29532. 00000 - "Java call terminated by uncaught Java exception: %s"
*Cause: A Java exception or error was signaled and could not be
resolved by the Java code.
*Action: Modify Java code, if this behavior is not intended.
, 여기에 내가 코드입니다
package mehmet_java_2db_trial;
공용 클래스 kondrakk {
public static float getDistance(String source, String target) {
final int sl = source.length();
final int tl = target.length();
if (sl == 0 || tl == 0) {
if (sl == tl) {
return 1;
}
else {
return 0;
}
}
int n=3;
int cost = 0;
if (sl < n || tl < n) {
for (int i=0,ni=Math.min(sl,tl);i<ni;i++) {
if (source.charAt(i) == target.charAt(i)) {
cost++;
}
}
return (float) cost/Math.max(sl, tl);
}
char[] sa = new char[sl+n-1];
float p[]; //'previous' cost array, horizontally
float d[]; // cost array, horizontally
float _d[]; //placeholder to assist in swapping p and d
//construct sa with prefix
for (int i=0;i<sa.length;i++) {
if (i < n-1) {
sa[i]=0; //add prefix
}
else {
sa[i] = source.charAt(i-n+1);
}
}
p = new float[sl+1];
d = new float[sl+1];
// indexes into strings s and t
int i; // iterates through source
int j; // iterates through target
char[] t_j = new char[n]; // jth n-gram of t
for (i = 0; i<=sl; i++) {
p[i] = i;
}
for (j = 1; j<=tl; j++) {
//construct t_j n-gram
if (j < n) {
for (int ti=0;ti<n-j;ti++) {
t_j[ti]=0; //add prefix
}
for (int ti=n-j;ti<n;ti++) {
t_j[ti]=target.charAt(ti-(n-j));
}
}
else {
t_j = target.substring(j-n, j).toCharArray();
}
d[0] = j;
for (i=1; i<=sl; i++) {
cost = 0;
int tn=n;
//compare sa to t_j
for (int ni=0;ni<n;ni++) {
if (sa[i-1+ni] != t_j[ni]) {
cost++;
}
else if (sa[i-1+ni] == 0) { //discount matches on prefix
tn--;
}
}
float ec = (float) cost/tn;
// minimum of cell to the left+1, to the top+1, diagonally left and up +cost
d[i] = Math.min(Math.min(d[i-1]+1, p[i]+1), p[i-1]+ec);
}
// copy current distance counts to 'previous row' distance counts
_d = p;
p = d;
d = _d;
}
// our last action in the above loop was to switch d and p, so p now
// actually has the most recent cost counts
System.out.println(1.0f - (p[sl]/Math.max(tl, sl)));
return 1.0f - (p[sl]/Math.max(tl, sl));
}
0123을 : 사용하려고
}
Please HELP! 사전에
감사합니다 ...
'.class' 파일을 컴파일하는 데 사용한 Java 버전은 무엇입니까? 어떤 오라클 버전을 사용하고 있습니까? –
oracle 11g를 사용 중이며 java 버전은 1.5입니다. –
@LukeWoodward "ORA-29552 : Verifiedatiewaarschuwing : java.lang.UnsupportedClassVersionError : mehmet_java_2db_trial/kondrakk (지원되지 않는 major.minor 버전 51.0)"오류가 나타났습니다. 클래스 파일은 1.7 버전에서 만들어졌고 1.5 버전에서 만들어야합니다. 어떻게해야합니까? –