`
wlbbswl
  • 浏览: 172237 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle 中对clob字段进行distinct 操作

阅读更多
oracle 10+g不支持对类型为CLOB的列进行distinct,也不支持union,所以在遇到此问题,需要对SQL语句进行重新,从另一思想去实现同样的效果的。union没仔细思考过,具体还要看union里面的条件如何,最简单的方法是利用to_char将clob字段转换成char型,但存在一个问题,如clob中的字符长度超过4000时会报错。在此主要对distinct的转换方法进行列举:

表结构如下:

Table1:


id(varchar)  title(varchar)  content(clob)
1  title1  <CLOB>
2  title2  <CLOB>


Table2:


id(varchar)  table_id(varchar)  object(varchar)
1  1  123
2  1  abc
3  1  111
4  1  222
5  2  123




SQL语句:

select distinct table1.* from table2 table2 left join table1 table1 on table1.id = talbe2.table_id

where table2.object = '123' or table2.object = '111' or table2.object = '222' or table2.object = '333'

执行该语句,出现错误:ORA-00932,数据类型不一致:应为-,却获得CLOB。




1、利用rowid,过滤重复的数据。

这个方法的思路来源,就是对某个字段进行distinct时的解决方法。

基本思路:select   B.name,B.id   from   table   B   where     not   exists   (select   1   from   table   A     where   A.name   =   B.name   AND   B.id_key   >   A.id_key)

A表,B表为同一张表,表中的数据存在name相同的,但id_key不同,该语句的目的是把同名的只显示一条即可,其它同名记录过滤。

将该思想转换到当前的问题上,利用每条记录的rowid不同进行过滤。

select p4.*, p4.rowid from (
select p.* from table2 s left join table1 p on s.table_id = p.id
where s1.object = '123' or s1.object = '111' or s1.object = '222' or s1.object = '333'
) p4
where not exists (
select 1, p2.rowid from (
select p1.* from table2 s1 left join table1 p1 on s1.table_id= p1.id
where s1.object = '123' or s1.object = '111' or s1.object = '222' or s1.object = '333') p2
where p4.id = p2.id and p4.rowid > p2.rowid
)

2、采用子查询进行过滤重复的数据。

select * from table1 t1 where t1.id in (

selcet distinct p1.id from table2 s1 left join table1 p1 on s1.table_id= p1.id
      where s1.object = '123' or s1.object = '111' or s1.object = '222' or s1.object = '333'

)

3、采用to_char函数,直接使用distinct(前提是:clob字段中的字符长度少于4000)。

select distinct table1.id, table1.tittle, to_char(table1.content) from table2 table2

        left join table1 table1 on table1.id =  talbe2.table_id

        where table2.object = '123' or table2.object = '111' or table2.object = '222' or table2.object = '333'

分享到:
评论

相关推荐

    oracle数据库中如何处理clob字段方法介绍

    在Oracle数据库中,CLOB...总之,处理Oracle中的CLOB字段需要对数据库特性和事务管理有深入理解,同时也需要熟悉Java或其他编程语言中的CLOB操作。通过合理的策略和技巧,可以有效地管理和操作这些大型文本数据。

    oracle数据库常用操作指令

    Oracle数据库是目前广泛使用的大型关系型数据库...在Oracle数据库中,合理使用上述常用操作指令能够有效完成数据库的日常管理工作,对于Oracle入门级人物而言,掌握这些基本指令是进行进一步数据库学习和实践的基础。

    Oracle查询操作的学习笔记

    ### Oracle查询操作学习笔记知识点详解 #### 一、Oracle用户管理与权限分配 ...以上是关于Oracle查询操作的学习笔记中的核心知识点汇总,希望能够帮助初学者更好地理解和掌握Oracle数据库的基础知识。

    oracle 数据库常用的方法和错误总结

    以下是对标题和描述中所述知识点的详细说明: **一、Oracle 数据库中的常用数据类型** 1. `VARCHAR2(长度)`:可变长度字符串,其中长度参数指定最大字符数。 2. `CHAR(长度)`:固定长度字符串,无论实际存储的数据...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;svrmgrl SVRMGR&gt;connect internal SVRMGR&gt;startup ...

    震撼推出超方便实用的Oracle开发工具 - Oracle SQL Handler,双语界面,智能SQL编辑器,免装Oracle客户端,能运行于Windows, 双语界面

    将 SELECT 语句的查询结果显示在工作表,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提 交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、将选择的单元格数据导出为 XLS /CSV /INSERT SQL ...

    oracle笔记

    `SELECT`语句用于从表中检索数据,`DISTINCT`去除重复行,`ORDER BY`进行排序。`WHERE`子句用于指定查询条件,支持`AND`、`OR`和`IN`等逻辑运算符。`LIKE`和`BETWEEN`等也是常用的查询条件。`GROUP BY`和`HAVING`...

    MLDN_oracle课堂笔记(全).pdf

    文档中提到的emp(员工)和dept(部门)表是Oracle示例数据库中常用的表,它们之间通过deptno字段进行关联。 6. SQL语言基础: 文档中提到了SQL(Structured Query Language),这是用于管理关系数据库管理系统...

    DBA对Oracle SQL编写规范的总结

    ### DBA对Oracle SQL编写规范的总结 #### 一、引言 在Oracle数据库开发过程中,遵循一套标准化的SQL编写规范对于提升代码质量、增强可读性和可维护性至关重要。本文档由一位经验丰富的数据库管理员(DBA)撰写,旨在...

    Oracle开发工具 - Oracle SQL Handler(功能强大,超方便好用, 免装客户端, Windows / Linux)

    将 SELECT 语句的查询结果显示在工作表,可以直接对查询结果进行再操作,如 修改、 插入行、删除行、提交(将表格中的数据改变写入相应的数据库表中)、多功能拷贝、将选 择的单元格数据导出为 XLS /CSV /INSERT SQL...

    Oracle数据库学习日记-实用性最强的Oracle学习总结.docx

    - **用途:** 在SQL*Plus中进行文件的读写等操作。 - **常见命令:** - `spool filename` (将输出重定向到文件) - `spool off` (停止重定向) **1.1.9 &交互式命令** - **用途:** 运行SQL脚本文件。 - **语法...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来...

    oracle 基础教程

    在Oracle数据库中,`SELECT`语句用于从表中检索数据,如`SELECT DISTINCT mycolumn FROM mytable`用于获取`mytable`中`mycolumn`列的所有不重复值。`ORDER BY`子句则用来对查询结果进行排序,如`SELECT price FROM ...

    Oracle数据库学习日记

    - **文件操作**: SQL*Plus支持基本的文件操作,如读取文件中的命令 (`@file_name`) 和将查询结果输出到文件 (`spool file_name`)。 **1.1.9 & 交互式命令** - **变量替换**: SQL*Plus支持使用 `&variable` 来获取...

    oracle数据库面试题目汇总及答案解析.zip

    - ORDER BY:对结果集进行排序。 - DISTINCT:去除重复行。 3. **Oracle数据类型** - NUMBER:数值类型,可以包含整数和小数。 - VARCHAR2:可变长度字符串。 - DATE:日期和时间类型。 - CLOB和BLOB:用于...

    orcale常用命令

    但此时不对数据文件和日志文件进行校验检查。 3、startup open dbname 先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件, 这种方式下可访问数据库中的数据。 4、startup,...

Global site tag (gtag.js) - Google Analytics