java - ORA-29531: 类错误中没有方法
问题描述
我尝试在 PL/SQl 中编写一个 Wrapper 函数来调用 org.apache.commons.codec.language.colognephonetic 类的编码函数,如官方 apache commons wiki 中所述。科隆拼音阿帕奇
包装函数如下所示:
function get_phonetic_string(i_string VARCHAR2) RETURN VARCHAR2 AS LANGUAGE java name 'org.apache.commons.codec.language.ColognePhonetic.encode(
java.lang.String
) return java.lang.String';
但是,当我执行包装函数时,出现以下错误:ORA-29531: no method encode in class org/apache/commons/codec/language/ColognePhonetic。但显然有一个编码功能。
有人可以帮我弄清楚我做错了什么吗?
解决方案
首先,确保org.apache.commons.codec.language.ColognePhonetic
类在数据库中(它可能不会)。
SELECT *
FROM ALL_OBJECTS
WHERE OBJECT_TYPE LIKE '%JAVA%'
AND LOWER( OBJECT_NAME ) LIKE '%colognephonetic%';
如果存在则应返回一行(可能需要以特权用户身份运行)。
如果它不存在,那么您将需要使用loadjava
应用程序来加载包含类的 jar 库。
然后编写一个包装器来创建一个静态函数,该函数生成一个类的实例(未经测试):
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';
推荐阅读
- angularjs - 有没有办法在 Angular Js 自定义指令中添加“uib-tooltip-html”作为属性?
- babylonjs - bayblonjs:babylon.js 中是否有方法/函数可以找到最短(最佳)路径
- android - 如何在 Android 11 中创建目录
- angular - 自定义 Angular 库在 Web 应用程序中引发 NullInjector 错误
- python - 交叉验证错误 DataConversionWarning:当需要一维数组时,传递了列向量 y
- flutter - GestureDetector ontap 不起作用,但 ondouble tap 起作用。扑
- java - Log4J2 - 只写入日志文件而不是控制台
- sql - 两列之间存在差异的 WHERE 子句
- visual-studio - “System.NullReferenceException”类型的第一次机会异常
- php - 如何确保每个事件只能通过 codeigniter 中的 role_id 查看(只有超级管理员可以查看所有列表)?