(一)问题提出:

不知道大家有没有遇到过这样的情况,同样的sql在pl/sql下面执行正常,但是拷贝到表字段中,点击提交的时候老是会报ORA-01480: STR 绑定值的结尾 Null错误,如图:

这时候去掉几行在提交又可以,加上一行就报错。

(二)问题分析

上面的错误很有可能是字符串太长了,可能你会说,不会啊,我就几行sql,我的字段长度是3000的,怎么可能超长呢?,事实上发生这种情况的sql大部分经过sql美化处理,里面含有大量的空格。

直接上例子,如图:

很普通的sql,看起来字符很少,但是里面有很多空格,直接使用16进制工具查看更明显。

里面的20对应十进制就是32,对应ascii就是空格。如图:

所以看起来字符串很少,但是加上大量的空格很容易超过字段的最大长度。

(三)问题处理方法

既然有空格,我把多余的空格去掉不就可以了吗?

很正确的做法,如何去掉多余的空格呢?

经过美化的sql不仅含有空格,还有很多换行字符,oracle使用chr(10),也就是ascii的10来表示换行。

处理思路是:想把chr(10)换成空格' ',然后使用正则把多余的空格替换为一个空格。我也不卖关子了,直接上sql。

select id,

v_text,

length(v_text) src_len,

regexp_replace(replace(v_text, chr(10), ' '), '\s{2,}', ' ') pro_str,

length(regexp_replace(replace(v_text, chr(10), ' '), '\s{2,}', ' ')) pro_len

from t_blob_test

处理结果为:

(四)问题处理方法续

反应快的朋友可能回想,你上面写的毫无意义,你能保存,那证明上面的没有超过字符串的最大长度,我遇到的问题是保存不了,那怎么做呢?

方法是一样的,去掉多余空格。

步骤如下:

(一)把sql中的'''换成双引号,可以使用pl/sql的Ctrl+F完成。

(二)构建临时结果,直接替换空格

在sql前面加上'select ,sql后面加上from dual,注意去掉sql最后的;,使用with直接查询,如下所示,把下面的abc abc替换成前面的sql字符串(单引号全部替换为双引号之后的结果)就可以了:

with tmp_t as(

select 'select abc abc from dual' as content from dual)

select length(content) src_len,

regexp_replace(replace(content, chr(10), ' '), '\s{2,}', ' ') pro_str,

length(regexp_replace(replace(content, chr(10), ' '), '\s{2,}', ' ')) pro_len

from tmp_t

结果如下:

上面的proc_str就是去掉多余空格的结果了。

对Java熟悉的朋友可以使用代码直接替换:

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class 去掉多余回车空格 {

public static void main(String[] args) {

String fileName = "F:/saveFile/temp/测试sql2.sql";

processSqlFile(fileName);

}

public static void processSqlFile(String fileName) {

try {

FileReader rFile = new FileReader(fileName);

BufferedReader br2 = new BufferedReader(rFile);

StringBuffer context = new StringBuffer();

String str = null;

while ((str = br2.readLine()) != null) {

context.append(str).append("\n");

}

str = context.toString();

str = str.replaceAll("\\n", " ");//去掉换行

str = str.replaceAll("\\s{2,}", " ");//去掉多余的空格

FileWriter wFile = new FileWriter(fileName);

wFile.write(str);

System.out.println("修改成功");

rFile.close();

br2.close();

wFile.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

题外话:

感谢各位厚爱,本人博客从原来的3333次访问短短一个月达到了11000次访问,在此谢谢各位了。

本文系原创,转载请注明出处。谢谢。

全文完。

oracle空格太多,Oracle Sql字符串多余空格处理方法初记相关推荐

  1. oracle绑定值的结尾,Oracle Sql字符串多余空格处理方法小记

    (一)问题提出: 不知道大家有没有遇到过这样的情况,同样的sql在pl/sql下面执行正常,但是拷贝到表字段中,点击提交的时候老是会报ORA-01480: STR 绑定值的结尾 Null错误,如图: ...

  2. python中文字符串多余空格_python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解...

    python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解 在pdf转为文本的时候,经常会多出空格,影响数据观感,因此需要去掉文本中多余的空格,而文本中的英文之间的正常空格需要保留,输入 ...

  3. python中文字符串多余空格_[785]python去掉字符串中多余的空格

    # -*- coding:utf-8 -*- import re # 检验某个字符是否是中文字符 def is_chinese(char): if '\u4e00' <= char <= ...

  4. python去掉字符串尾部空格的函数_python清除字符串前后空格函数的方法

    python清除字符串前后空格函数的方法 python有时候需要清除字符串前后空格,而字符本身的空格不需要清除掉,那就不能用正则re.sub来实现. 这时用到strip()函数 用法: str = ' ...

  5. python字符串补空格输出_Python去除空格,Python中常见字符串去除空格的方法总结...

    今天小编就为大家分享一篇关于Python去除字符串前后空格的几种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧: Python去除空格方法一: stri ...

  6. C语言去掉字符串首尾空格,C语言实现去除字符串首尾空格

    C语言实现去除字符串首尾空格 2019年09月28日 | 萬仟网IT编程 | 我要评论 /* C语言去除字符串首尾空格,trim()函数实现 https://blog.csdn.net/u013022 ...

  7. c语言去除字符串的空格,C语言实现去除字符串中空格

    去除字符串中所有空格 voidVS_StrTrim(char*pStr) { char *pTmp = pStr; while (*pStr != '/0') { if (*pStr != ' ') ...

  8. oracle 排序太慢,Oracle 排序优化

    2015年5月20日19:14:43 - 排序 1. 查看排序区内存的大小以及设置 实际排序所用到的内存.磁盘的统计信息: pga_aggregate_target:此参数用来指定所有session总 ...

  9. java 多余的空格_java实现 删除输入的多余空格

    /* *    lfsfxy9 @ 09.12.25 *  主要用于去除字符输入过程中多输入的空格. *  此代码为Java作业 */ import java.io.*; public class f ...

最新文章

  1. 关于REID的mAP指标
  2. windows server 2003 安装显卡驱动
  3. sonarqube连mysql_.net持续集成sonarqube篇之sonarqube安装与基本配置
  4. 米熊科技:给烘培加点“云”的味道
  5. .rdlc 文件设置方向_在Word里面怎么设置把字竖着打出来?
  6. 一位女生写的追MM秘计
  7. 华为宣布:免费培养2000名Java开发者
  8. python mysql树_python操作mysql数据库
  9. scala 学习笔记--集合
  10. ImportError: cannot import name ‘imread’ from ‘scipy.misc’ 解决办法
  11. 2017/4/27 morning
  12. php过滤多空格_php如何去除多余空格
  13. NideShop:基于Node.js+MySQL开发的高仿网易严选开源B2C商城
  14. JPA/Hibernate 中@Formula的作用
  15. Missing Values(缺失值)
  16. 中国气象网 气象数据开放平台 API使用方法 (Android)(已废弃)
  17. 仅限中国:AMD推出Radeon RX 560 XT
  18. GMS认证送测前自检项小结
  19. NAGVIS安装详解
  20. 车牌识别(一)——车牌定位(附详细代码及注释)

热门文章

  1. spring hibernate 连接sqlserver 数据库的时候还需要jdbc包吗?
  2. 〖Linux〗Ubuntu13.10中使用虚拟机对MTK手机进行线刷
  3. 分享Silverlight/WPF/Windows Phone一周学习导读(3月1日-3月5日)
  4. 捅破窗户纸:如何从过程到对象—For金色的海洋以及所有为面向对象而困惑的Tx...
  5. CoinEx将于8月6日开启Spice加速器申购
  6. 关于比特币现金的一些误区
  7. PostgreSQL 打开文件句柄优化 - 百万以上实体对象初始化优化
  8. 二叉树的前序中序后序遍历(当然是非递归的!)
  9. 将选定的文本对象左对齐、右对齐或对中
  10. keepalive实验配置