java对ORACLE中的于NCHAR数据的处理,查询

nchar 数据如果指定了长度,如果数据不满指定的位数,将会在后面补空格。
所以当你使用 jdbc 或者其他框架以该字段作为查询条件时,形成的 sql 也会自动补空格
如:

SELECT FROM marketing_menu WHERE CDMC = “TEST ”

  

由于存在空格,查询的时候会出错。
正确书写方式去除空格:

SELECT FROM marketing_menu WHERE trim(‘ ‘ from CDMC) = ‘Test’

  

由于历史原因,当初设计这个表结构的人走了,代码有php转java,发现nchar无论如何查询不到,于是采用上面方法
亲测有效:

 <select id="selectByOidOrHoid" parameterType="java.lang.String"  resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from WX_PAY_LOG
        where
        ESTATE = 1
        <if test="oid != null" >
            and trim(‘ ‘ from OID) = #{oid}
        </if>
        <if test="hoid != null" >
            and HOID= #{hoid}
        </if>
        order by MTIME
    </select>

  

【转】https://blog.csdn.net/jacxuan/article/details/78780921

原文地址:https://www.cnblogs.com/achengmu/p/12706613.html

时间: 2024-10-15 18:54:58

java对ORACLE中的于NCHAR数据的处理,查询的相关文章

向oracle中的表插入数据的方法

向oracle中的表插入数据的方法有以下几种: 假设表名为User 第一种方法:select t.*,rowid from User t;-->点击钥匙那个标记就可向表中添加数据 第二种方法:select t.*,rowid from User t for update;-->点击钥匙那个标记就可向表中添加数据 第三种方法:在oracle中的table表中选中你要添加数据的那个表-->点击右键-->选中Edit data-->就可向表中添加数据 第四种方法:通过DAO层来添加

oracle中的rowid和数据行的结构

在oracle数据库系统中每一行都有一个rowid,oracle数据库系统就是利用rowid来定位数据行的.rowid也是oracle中内置的一个标量数据类型 rowid有一下特点; 是数据库中每一行的唯一标识 并不是显示的存储某一列的值 可以用来定位行,虽然没有直接给出行的物理地址 提供了访问一张表中数据行的最快机制 1)rowid有两种类型:限制rowid和扩展rowid 一.扩展rowid 扩展rowid是oracle8i之后的版本中引入的,其结构如下: 数据对象号+相对文件号+块号+行号

Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)

应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create or replace type splitTable is table of varchar2(100); 2.创建函数fn_splitString(功能是将字符串分割成多条记录)--测试语句select * from table(fn_splitString('ernanyinv','nan'))

Oracle中对XML格式数据的操作,CLOB类型转换XMLType类型

今天遇到个问题,关于Oracle中xml格式数据的操作. 问题记录:需求上明确该字段类型为xmltype,要做的是解析该字段,但是由于数据库设计人员的问题,某些表中的该字段类型设计成了Clob类型. 解决方法: xmltype类型解析很容易:使用extractvalue函数即可,用法: select column_name1,column_name2,extractvalue(column_name3,'/nodeName1/nodeName2/nodeName3') from table; c

oracle中number类型的数据使用as string 得到的值为null

1,如果数据的运行时类型(和数据库字段类型相同)不是字符串类型,比如number/date等,将ds.Tables[0].Rows[i][j] 调用 as string 时,不管 这个字段是否有值,这样都会得到null. as string 只会将 运行时类型为string的对象转为字符串,如果运行时类型不是string,就会得到 null 而不报错. 2,如果从数据库中查到的数据可能为null ,就调用Convert.ToString() 类转换. 如果它不会为Null,就直接调用 .ToSt

oracle中sql语句小练习(使用连接查询)

假设A(m,n,p),B(m,n,p) --1.A表中有某一项m而B表中没有 使用左连接查询:select a.* from A a left join B b on a.m=b.m where b.m is null; 左连接查询公共部分以及A表中的全部数据,B表中该列值为null的数据即为A中存在而B中不存在的结果. --2.A表中没有某一项m而B表中有 可改为使用右连接查询: select b.* from A a right join B b on a.m=b.m where a.m i

Java 调用Oracle中的存储过程

--建表 SQL> create table TBook(bookId number(8),bookName varchar2(50),publishHouse varchar2(50)); --编写过程 --in:输入参数:out:输出参数 SQL> create or replace procedure sp_pro7(spBookId in number,spName in Varchar2,spPublishHost in varchar2) is begin insert into

Oracle中修改已存在数据的字段类型

原字段类型为varchar2,实际上均为数字,想将字段类型改为number,报错ORA-01439: column to be modified must be empty to change datatype 解决方法: tablename为表名称,colname为要修改的字段名 alter table tablename add tempcolumn varchar2(100);--添加临时字段tempcolumn update tablename set tempcolumn=colnam

JAVA获取oracle中sequences的最后一个值

项目中,用到一个序列作单号,框架用的是ssh,在dao层去拿的时候,运行时报错为dual is not mapped,[select *.nextval nextvalue from dual] 后来检查发现,获取方式不对,于是改成下面这样,就可以正常获取了 //获取seq的最后一个值 public String findSeq(){ try { String sql = "select PATIENT_SEQ.nextval nextvalue from dual"; Integer