`
53873039oycg
  • 浏览: 841366 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Oracle Sql字符串多余空格处理方法小记

阅读更多

     (一)问题提出:

 

    不知道大家有没有遇到过这样的情况,同样的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就是去掉多余空格的结果了。

    

      更简单的sql为:

     

select regexp_replace(replace(q'[&1]', chr(10), ' '), '\s{2,}', ' ')  from dual

 

     对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次访问,在此谢谢各位了。

 

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

      全文完。

 

  • 大小: 15 KB
  • 大小: 113.9 KB
  • 大小: 361.1 KB
  • 大小: 77.2 KB
  • 大小: 155.9 KB
  • 大小: 127.1 KB
  • 大小: 149.3 KB
  • 大小: 132.9 KB
1
4
分享到:
评论

相关推荐

    Oracle_Sql_中常用字符串处理函数

    Oracle Sql 中常用字符串处理函数 Oracle Sql 中提供了多种字符串处理函数,用于对字符串进行各种操作,如大小写转换、截取、连接、查找、替换等。下面是 Oracle Sql 中常用的字符串处理函数: 1. 大小写转换函数 ...

    oracle通过sql实现字符串转数字oracle函数

    在Oracle数据库中,将字符串转换为数字是一项常见的操作,特别是在处理包含数字的字符串列时,可能需要进行数值计算或按照数值大小进行排序。本篇文章将深入探讨如何在SQL查询中利用Oracle提供的函数来实现这一目标...

    C#连接Oracle数据库字符串

    C#连接Oracle数据库字符串 C#连接Oracle数据库字符串

    Oracle拆分字符串,字符串分割的函数

    在Oracle数据库中,处理字符串是常见的操作之一,尤其是在数据分析或数据清洗的过程中。有时我们需要将一个长字符串分割成多个部分,以便进行进一步的操作。Oracle提供了一些内置的函数来帮助我们完成这个任务。本篇...

    Oracle连接字符串

    Oracle 连接字符串是指连接 Oracle 数据库的字符串书写方法,本文总结了多种连接 Oracle 数据库的字符串书写方法。 一、标准连接字符串 标准连接字符串是最基本的连接字符串格式,用于连接 Oracle 数据库。例如,...

    Oracle查找字符串中某字符出现的次数

    select f_find('Ap@2233ll@@l@@','@') from dual 返回结果为5,代表‘@’在该字符串中出现5次。 同理 select f_find('Ap@223SWEQQQ3ll@@l@@','Q') from dual---返回3,代表Q在字符串中出现了3次, select f_find('我...

    oracle中操作字符串

    在Oracle数据库中,对字符串进行处理是一项常见的需求,特别是在处理带有特定分隔符(如逗号`,`、冒号`:`等)的字符串时。本文将详细介绍如何利用Oracle内置函数来实现从含有逗号和冒号的字符串中提取特定部分的功能...

    oracle-字符串去重函数

    传入一个字符串和该字符串的分割字符,返回去重后的字符串,可以直接在plsql中运行,简单的函数运用,能处理oracle中。资源仅供参考

    Oracle JSON 字符串处理实例

    Oracle数据库在JSON处理方面提供了强大的功能,特别是在处理JSON字符串时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务与应用程序之间的数据传输。在Oracle中,处理JSON字符串...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    oracle 关于字符串中带有逗号间隔的查询.doc

    在Oracle数据库中,进行字符串查询时,特别是当字符串中包含逗号等特殊字符时,我们需要巧妙地使用SQL的LIKE操作符来实现精确匹配。这里,我们面对的问题是想要查询DWDH字段中含有"飞信"但不包含"移动飞信"或"飞信...

    截取用,分割的字符串中的第n个字符串 SQL

    综上所述,本文介绍了如何在SQL中实现截取用特定字符分割的字符串中的第n个子字符串的方法,并通过实例展示了其实际应用场景。这种方法不仅适用于简单的数据处理任务,还能够在复杂的数据分析项目中发挥重要作用。

    oracle日期字符串的相互转换

    通过以上内容,我们详细介绍了Oracle中日期与字符串转换的各种方法。这些转换不仅限于简单的日期格式化,还包括了日期的加减运算、时间戳与时区的处理等高级功能。掌握这些转换方法有助于提高SQL查询的灵活性和效率...

    oracle中字符串截取

    在实际应用中,常常需要结合使用`INSTR`和`SUBSTR`函数来实现更复杂的字符串处理逻辑。 ##### 示例3:根据分隔符截取子字符串 假设表`T_RCV_ISSUE`中有一个字段`WH_CD`,其中存储着类似于`'MR-PS+007'`或`'MR-WS+...

    oracle分割字符串方法

    这里利用了函数 regexp_substr和connect by 及oracle的正则相关函数实现oracle分割字符串方法

    oracle 如何判断一个字符串能否转换为数字?

    ### Oracle 判断字符串是否能转换为数字的方法 在Oracle数据库中,我们经常需要处理各种数据类型之间的转换。尤其是在处理字符型数据时,有时我们需要判断一个字符串是否能够被成功地转换成数字类型。与SQL Server...

    Oracle字符串处理函数

    ### Oracle字符串处理函数详解 #### 1. ASCII ASCII函数用于返回给定字符的ASCII码值。例如: ``` SQL> select ascii('A') A, ascii('a') a, ascii('0') zero, ascii(' ') space from dual; AAZERO SPACE ------...

    在存储过程中执行字符串中存有的sql语句

    oracle在存储过程中执行字符串中存有的sql语句

    sql中循环控制 SQL中json字符串处理.txt

    sql中while循环控制,不需要获取数据到程序语言中处理。 SQL中直接进行json格式字符串处理,省掉数据库和程序直接的调用

    Oracle常用字符串处理函数

    ### Oracle常用字符串处理函数 在Oracle数据库中,字符串处理函数是非常重要的工具,它们可以帮助我们高效地管理和操作数据。本文将详细介绍几种常用的字符串处理函数及其应用方法。 #### 1. LTRIM 和 RTRIM ...

Global site tag (gtag.js) - Google Analytics