CREATE or replace FUNCTION parse_html(value in CLOB)
RETURN CLOB
AS LANGUAGE JAVA NAME 'MyClass.parse(java.lang.String) return java.lang.String';
并添加了相应的Java
类。
当我调用这个函数parse_html(clob_col_name)
-
SELECT PARSE_HTML(m.clob_col_name)
FROM my_table m
where length(m.clob_col_name) > 4000;
我得到了以下错误-
public static Clob parse(Clob clob) {
String value = clobToString(clob);
if (!isEmpty(value)) {
return stringToClob(Jsoup.parse(value).text().trim());
}
return null;
}
private static String clobToString(Clob clob) {
StringBuilder sb = new StringBuilder();
if (clob == null) {
return null;
}
try {
Reader reader = clob.getCharacterStream();
BufferedReader br = new BufferedReader(reader);
String line;
while (null != (line = br.readLine())) {
sb.append(line);
}
br.close();
} catch (IOException e) {
// handle this exception
} catch (SQLException e) {
//e.printStackTrace();
}
return sb.toString();
}
在返回解析后的值之前,我还需要将string
转换回clob
。
private static Clob stringToClob(String value) {
if (isEmpty(value)) {
return null;
}
Clob myClob = null;
try {
myClob = new SerialClob(value.toCharArray());
} catch (SQLException e) {
//e.printStackTrace();
}
return myClob;
}
在调用函数时-
create or replace FUNCTION parse(value in CLOB)
RETURN CLOB
AS LANGUAGE JAVA NAME 'HtmlParser.parse(java.sql.Clob) return java.sql.Clob';
我得到了以下错误-
您在Oracle Java存储过程中使用string
声明的Java方法仅适用于varchar2
参数。
这里有一个简单的例子
create or replace and compile java source named "HelloVarchar" as
public class HelloVarchar
{
public static String world(String txt)
{
return "Hello " + txt;
}
};
/
CREATE or replace FUNCTION parse_varchar(value in VARCHAR2)
RETURN VARCHAR2
AS LANGUAGE JAVA NAME 'HelloVarchar.world(java.lang.String) return java.lang.String';
/
要使用CLOB,选项是声明oracle.sql.CLOB
,但是这个类si显然不推荐使用java.sql.CLOB进行补偿
create or replace and compile java source named "HelloClob" as
import java.sql.Clob;
import java.sql.SQLException;
public class HelloClob
{
public static Clob world(Clob txt) throws SQLException
{
return txt;
}
};
/
CREATE or replace FUNCTION parse_clob(value in CLOB)
RETURN CLOB
AS LANGUAGE JAVA NAME 'HelloClob.world(java.sql.Clob) return java.sql.Clob';
/
我想更新xml中的一个值 更新trb1_sub_errs set error_status='ready_to_recycle',general_data_c=updatexml(xmltype(general_data_c),'//data/cmheadertransaction/transactionrsn/text()','creq'),其中sub_trx_id=4678604091;更新t
我们有一些lob和varchar2类型的数据被错误地编码为AL32UTF8,我们需要将其编码转换为we8mswin1252字符集。我得到了用于字符集转换的convert函数,这个函数在varchar2 datatype中工作得很好,但在CLOB中使用时给出了一些模糊的字符。我当前的编码是AL32UTF8。 数据库:Oracle 12c
Oracle XE 11。一个非常简单的连接查询给了我以下错误: 表: 产品描述为CLOB。 SQL SQL 查询: 第1行的错误:ORA-00932:数据类型不一致:预期-得到CLOB 如果我删除t0。从选择名称,它将工作。奇怪的 谢谢。
更新1 DDL和示例数据
好吧,我一直在Kotlin试验原始数据存储,我有一个问题。我正在使用以下内容。原型文件: 这是我的序列化程序类: 和我的存储库: 因此,在我的updateValue()方法中,我可以设置“name”字段的名称,但我没有地址消息字段的setter,如street和number。编译器只显示getter。在姓名和年龄字段的另一边,我有setters。如何对这两个地址字段使用setters:街道、编号?