我正在尝试从 > 4000 个字符的字符串(在 file_data 绑定变量中提供)创建一个 Clob,以在下面的 Oracle SELECT 谓词中使用:
myQuery=
select *
from dcr_mols
WHERE flexmatch(ctab,:file_data,'MATCH=ALL')=1;
Run Code Online (Sandbox Code Playgroud)
如果我在 file_data 中添加 TO_CLOB() ,它就会使 varchar 的臭名昭著的 Oracle 4k 限制失败(对于 <4k 字符串很好)。错误(在 SQL Developer 中)是:
ORA-01460: unimplemented or unreasonable conversion requested
01460. 00000 - "unimplemented or unreasonable conversion requested"
Run Code Online (Sandbox Code Playgroud)
仅供参考 flexmatch 功能用于搜索分子,这里有一个描述:http : //help.accelrysonline.com/ulm/onelab/1.0/content/ulm_pdfs/direct/developers/direct_2016_developersguide.pdf
函数本身有点复杂,但本质是第二个参数必须是一个clob。所以我的问题是如何将超过 4000 个字符的 Java 字符串 bind_variable 转换为 sql(或 Java)中的 clob。
我在 Java (Spring boot 2) 中尝试了以下方法(在插入 clobs 时有效),使用:
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("file_data", fileDataStr,Types.CLOB);
jdbcNamedParameterTemplate.query(myQuery,parameters,…
Run Code Online (Sandbox Code Playgroud)
这种方法应该可以工作,但它会失败,并出现一个复杂的 flexmatch …
Oracle 11.2
下面是XMLQuery我在XMLType列上运行的减少版本.当我运行查询,简单地分析,并重新创建存储XML,则不需要的默认和妾的命名空间插入到了父代的子元素.请注意,tsxm名称空间不会被插入,这是因为它不等于默认名称空间这个查询什么也不做,可以轻松地重写,但真正的(更大)查询使用相同的方法,所以这就是为什么我是以这种格式发布问题.
创建表:
CREATE TABLE XML_DOCUMENT_TMP
(
DOCUMENT_ID NUMBER(12) NOT NULL,
XML_DATA SYS.XMLTYPE NOT NULL,
CREATED_DATE TIMESTAMP(6) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
插入一些数据(必须按原样配置名称空间):
insert into XML_DOCUMENT_TMP
(document_id,created_date,xml_data)
values(1,sysdate,
'<patent xmlns="http://schemas.thomson.com/ts/20041221/tsip"
xmlns:tsip="http://schemas.thomson.com/ts/20041221/tsip"
xmlns:tsxm="http://schemas.thomson.com/ts/20041221/tsxm"
tsip:action="replace" tsip:cc="CA" tsip:se="2715340" tsip:ki="C">
<accessions tsip:action="replace">
<accession tsip:src="wila" tsip:type="key">CA-2715340-C</accession>
<accession tsip:src="tscm" tsip:type="tscmKey">CA-2715340-C-20150804</accession>
</accessions>
<claimed tsip:action="replace">
< claimsTsxm tsip:lang="en">
<tsxm:heading tsxm:align="left">We Claim:</tsxm:heading>
<claimTsxm tsip:no="1" tsxm:num="1" tsip:type="main">1. power. </claimTsxm>
</claimsTsxm>
</claimed>
</patent>
');
Run Code Online (Sandbox Code Playgroud)
运行XMLQuery:
WITH tmpTable …Run Code Online (Sandbox Code Playgroud) 我正在学习 SpringBoot。我的(微不足道的)问题是我无法从 SpringBoot 调用的 CommandLineRunner 接口中获取 run() 方法。我正在使用 Java 8、Eclipse Oxygen、Maven,并且我正在将我的项目作为“Spring Boot 应用程序”运行。代码是:
package com.clarivate.dataviewer;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DvMain implements CommandLineRunner{
static Logger logger = LogManager.getRootLogger();
public static void main(String[] args) {
logger.debug("DS1A in main()");
//SpringApplication.run(DvMain.class, args);
SpringApplication app = new SpringApplication(DvMain.class);
//ConfigurableApplicationContext app = SpringApplication.run(DvMain.class, args);
logger.debug("DS1B in main()");
app.run(args);
}
@Override
public void run(String... args) throws Exception {
// This does not get called
logger.debug("DS4 this line is …Run Code Online (Sandbox Code Playgroud) java ×2
spring-boot ×2
namespaces ×1
oracle ×1
oracle11g ×1
qxmlquery ×1
spring ×1
sql ×1
xml ×1