小编DS.*_*DS.的帖子

在从 String > 4k 创建的谓词中使用 Oracle clob

我正在尝试从 > 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 …

java sql oracle spring spring-boot

11
推荐指数
1
解决办法
774
查看次数

Oracle XMLQuery插入不需要的命名空间

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)

xml namespaces oracle11g qxmlquery

10
推荐指数
1
解决办法
1098
查看次数

未调用 SpringBoot CommandLineRunner run() 方法

我正在学习 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 spring-boot

10
推荐指数
1
解决办法
9271
查看次数

标签 统计

java ×2

spring-boot ×2

namespaces ×1

oracle ×1

oracle11g ×1

qxmlquery ×1

spring ×1

sql ×1

xml ×1