sql >> Base de Datos >  >> RDS >> Oracle

ORA-29531:ningún método en error de clase

Primero, asegúrese de que org.apache.commons.codec.language.ColognePhonetic la clase está en la base de datos (probablemente no lo estará).

SELECT *
FROM   ALL_OBJECTS
WHERE  OBJECT_TYPE LIKE '%JAVA%'
AND    LOWER( OBJECT_NAME ) LIKE '%colognephonetic%';

Debería devolver una fila si existe (es posible que deba ejecutarse como un usuario privilegiado).

Si no existe, deberá usar loadjava aplicación para cargar la biblioteca jar que contiene las clases.

Luego escriba un contenedor para crear una función estática que haga una instancia de la clase (no probada ):

CREATE JAVA SOURCE NAMED Phonetics AS
import org.apache.commons.codec.language.ColognePhonetic;

public class Phonetics {
  public static String encode(
    final String text
  ){
    final ColognePhonetic cp = new ColognePhonetic();
    return cp.encode( text );
  }
}
/

CREATE FUNCTION get_phonetic_string(i_string VARCHAR2) RETURN VARCHAR2 AS
  LANGUAGE JAVA NAME 'Phonetics.encode( java.lang.String ) return java.lang.String';