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

oracle 中对LONG列进行查询

阅读更多
由于LONG列的诸多限制,使得LONG不能放到WHERE语句中进行限制。这篇文章简单描述一下如何对LONG列进行查询。





对LONG列是不能直接进行查询的:

SQL> CREATE TABLE T_LONG (ID NUMBER, LONG_COL LONG);

表已创建。

SQL> INSERT INTO T_LONG VALUES (1, LPAD(1, 32767, 'HELLO WORLD!'));

已创建 1 行。

SQL> INSERT INTO T_LONG VALUES (2, LPAD(1, 32767, 'HAPPY NEW YEAR!'));

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> SELECT * FROM T_LONG WHERE LONG_COL LIKE '%WORLD%'
2 ;
SELECT * FROM T_LONG WHERE LONG_COL LIKE '%WORLD%'
*第 1 行出现错误:
ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 LONG

根据Oracle的建议,应该避免再使用LONG类型。如果可能应该使用TO_LOB来重建表,将表中的LONG类型转化为CLOB或BLOB类型。

这里就不考虑这种方法了,只是讨论一下对于不能重建的表如何进行查询。

如果表中的数据长度不超过32K的话,可以考虑通过类似下面的PL/SQL代码来实现:

SQL> SET SERVEROUT ON
SQL> BEGIN
2 FOR I IN (SELECT * FROM T_LONG) LOOP
3 IF INSTR(I.LONG_COL, 'WORLD') > 0 THEN
4 DBMS_OUTPUT.PUT_LINE(I.ID);
5 END IF;
6 END LOOP;
7 END;
8 /
1

PL/SQL 过程已成功完成。

不过PL/SQL代码只能处理不超过32K的数据,超过这个限制,就无法通过PL/SQL来处理。

好在Oracle的全文索引是支持LONG类型的,建立一个CONTEXT索引,使用全文索引的查询语法就可以解决这个问题:

SQL> CREATE INDEX IND_T_LONG_COL ON T_LONG(LONG_COL) INDEXTYPE IS CTXSYS.CONTEXT;

索引已创建。

SQL> SELECT ID FROM T_LONG WHERE CONTAINS(LONG_COL, 'WORLD') > 0;

ID
----------
1


分享到:
评论

相关推荐

    hibernate映射Oracle中LONG类型

    "hibernate映射Oracle中LONG类型" Hibernate 框架映射 Oracle 中的 LONG 类型字段是一种复杂的技术问题。Oracle 中的 LONG 类型字段是一种特殊的数据类型,用于存储可变长字符串,最大长度限制是 2GB。这与 Java ...

    oracle里long类型

    不能在 SQL*Plus 中通过查询其他表的方式来创建 LONG 类型列。 此外,LONG 数据类型列也存在一些限制。例如,不能对 LONG 类型列加约束条件(NULL、NOT NULL、DEFAULT 除外);LONG 类型列不能用在 Select 的以下...

    ORA-01461 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

    ORA-01461 错误是 Oracle 数据库中的一种常见错误,错误信息为“仅可以为插入 LONG 列的 LONG 值赋值”。该错误通常是由于 Oracle 的 jar 包版本与 Oracle 数据库实际版本不匹配造成的。 在了解 ORA-01461 错误解决...

    oracle LongRaw 转 Blob 源码

    Oracle数据库中,LongRaw和Blob是两种不同的数据类型,它们分别用于存储大对象(LOB)数据。LongRaw类型是Oracle的原始数据类型,用于存储二进制大对象,而Blob类型则是二进制大型对象,更适合存储大量的二进制数据...

    一个选查询后插入到一个临时表的oracle函数

    本文将详细解析一个特定的Oracle函数——`NS_DNAF_GetPaidUpDeposit`,该函数旨在执行查询操作,并将结果插入到一个临时表中。通过分析该函数的结构、参数以及执行逻辑,我们可以更好地理解其工作原理及其应用场景。...

    ORACLE用户常用数据字典的查询使用方法

    ### ORACLE用户常用数据字典的查询使用...以上就是关于Oracle用户常用数据字典视图查询方法的一些介绍,希望对大家有所帮助。通过这些命令,我们不仅可以快速获取数据库中的各种信息,还能更好地管理和维护数据库结构。

    ORACLE_EBS常用表查询语句1

    在Oracle EBS(Enterprise Business Suite)系统中,数据库查询是日常运维和数据分析的重要部分。本文将分享一些常用的SQL查询语句,帮助用户更好地理解和利用Oracle EBS中的数据。 1. **查询菜单列表** Oracle ...

    Oracle与DB2数据类型分类对应说明

    Oracle 中的 ROWID 虚拟列用于对表中的某一列进行唯一标示,DB2/400 中也有这样的数据类型 ROWID,它与 Oracle 中的 ROWID 的功能相似。DB2/400 中的 ROWID 可以存放 40 byte 的数据用来唯一标示表中的每一行。 ...

    Oracle_11g_JDBC_ojdbc6.rar

    LONG列在Oracle中用于存储大文本或二进制数据,最大可存储约2GB的数据。当试图插入的数据超过这个限制,或者没有正确处理LONG类型的数据时,就会出现这个错误。 解决"ORA-01461"问题的方法通常有以下几点: 1. ...

    北大青鸟Oracle ppt2

    Oracle中的ROWID是伪列,它是数据库中每个行的唯一地址,用于快速定位数据。ROWNUM也是伪列,它返回行的序列号,常用于限制查询结果的数量。例如,`SELECT * FROM table WHERE ROWNUM 将返回表中的前10行。 总的来...

    ODI BLOB到Long Raw集成方法

    - **子句限制**:LONG列不能在WHERE、GROUP BY、ORDER BY子句中使用,也不能在DISTINCT SELECT语句中。 - **分布式查询**:LONG列不适用于分布式查询。 - **PL/SQL限制**:PL/SQL变量不能定义为LONG类型。 - **...

    oracle课件:第二章 表管理和查询.ppt

    ORDER BY子句用于对查询结果进行排序,而组函数(如COUNT、SUM、AVG、MAX和MIN)则用于对一组数据进行统计计算。通过这些工具,开发者可以有效地组织和分析数据库中的信息。 本章最后还提到了ROWID和ROWNUM这两个伪...

    Oracle与DB2数据类型的对应说明书

    Oracle中的ROWID虚拟列用于对表中的某一列进行唯一标示,DB2/400中也有类似的数据类型ROWID,它与Oracle中的ROWID的功能相似。DB2/400中的ROWID可以存放40 byte的数据用于唯一标示表中的每一行。 了解Oracle和DB2...

    mssql2oracle类型对比

    - `text`: 大文本数据类型,等同于Oracle中的`LONG`类型。 - `ntext`: Unicode大文本数据类型,Oracle中没有直接对应的类型,可以使用`LONG`作为替代。 - **Oracle**: - `CHAR`: 固定长度的字符串,建议使用SQL ...

    工作中oracle常用总结SQL语句汇总

    为了方便快速地回顾和使用这些常用的SQL语句,本篇文章将对一些重要的Oracle SQL命令进行归纳总结,并对其进行详细的解释,帮助大家更好地理解和掌握。 #### 一、连接与用户管理 **1. 连接数据库** - **语法**:`...

    ORACLE数据库中主要字段类型的读写例子(包括:Long、Raw、Blob).docx

    本示例主要探讨了三种特定的数据类型:Long、Raw和Blob,以及如何在数据库中对它们进行插入(INSERT)、更新(UPDATE)和查询(SELECT)操作。以下是关于这些字段类型及其使用方法的详细说明: 1. VARCHAR2(20):这...

    DBA对Oracle SQL编写规范的总结

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

    韩顺平2011oracle学习笔记

    1. **基本查询**:使用`SELECT column1, column2 FROM table_name WHERE condition`进行基础查询。 2. **复杂查询**:包括联接查询(JOIN)、子查询、集合操作(UNION, INTERSECT, MINUS),以及聚合函数(COUNT, ...

    Oracle培训教材.doc

    在Oracle中,常见的数据类型包括字符型(CHAR、VARCHAR2)、数字型(NUMBER)、日期型(DATE)和长值型(LONG RAW)。CHAR是固定长度的字符串,而VARCHAR2是可变长度的,存储空间只占用实际需要的大小。NUMBER数据...

Global site tag (gtag.js) - Google Analytics