Oracle中强烈不推荐用long类型,但是为了解燃眉之急,被迫用了long类型,简单啊,直接insert就行了。不过,没有想到long类型不支持Like,也不能直接to_char。
后悔了,想将long改回varchar2类型,但是又不能直接修改,否则会报错,提醒必须要清空数据,为了不清空数据,综合网上的资料总结了以下解决方案:
表jivemsg中的message类型long需要替换成varchar2:
原jivemsg表结构:
CREATE TABLE "JIVEMSG"
( "URI" VARCHAR2(100 BYTE) DEFAULT '' NOT NULL ENABLE,
"SENDER" VARCHAR2(100 BYTE) DEFAULT '',
"RECEIVER" VARCHAR2(100 BYTE) DEFAULT '',
"CREATIONDATE" VARCHAR2(15 BYTE) DEFAULT '',
"MESSAGETYPE" VARCHAR2(100 BYTE) DEFAULT '',
"MESSAGESIZE" NUMBER(*,0) DEFAULT 0,
"MESSAGE" LONG,
"FKDOMAIN" VARCHAR2(20 BYTE) DEFAULT NULL,
"VERSION" VARCHAR2(20 BYTE) DEFAULT NULL,
"FLAGS" VARCHAR2(20 BYTE) DEFAULT NULL,
"RECEIVERNAME" VARCHAR2(50 BYTE) DEFAULT NULL,
"SENDERNAME" VARCHAR2(50 BYTE) DEFAULT NULL,
CONSTRAINT "JIVEMSG_PK" PRIMARY KEY ("URI")
);
-------------------------------------------------------------------------
转换步骤:
1:创建jivemsg2表:
CREATE TABLE "JIVEMSG2"
( "URI" VARCHAR2(100 BYTE) DEFAULT '' NOT NULL ENABLE,
"SENDER" VARCHAR2(100 BYTE) DEFAULT '',
"RECEIVER" VARCHAR2(100 BYTE) DEFAULT '',
"CREATIONDATE" VARCHAR2(15 BYTE) DEFAULT '',
"MESSAGETYPE" VARCHAR2(100 BYTE) DEFAULT '',
"MESSAGESIZE" NUMBER(*,0) DEFAULT 0,
"MESSAGE" LONG,
"FKDOMAIN" VARCHAR2(20 BYTE) DEFAULT NULL,
"VERSION" VARCHAR2(20 BYTE) DEFAULT NULL,
"FLAGS" VARCHAR2(20 BYTE) DEFAULT NULL,
"RECEIVERNAME" VARCHAR2(50 BYTE) DEFAULT NULL,
"SENDERNAME" VARCHAR2(50 BYTE) DEFAULT NULL,
CONSTRAINT "JIVEMSG2_PK" PRIMARY KEY ("URI")
);
2:修改表jivemsg2的类型
ALTER TABLE JIVEMSG2 MODIFY ("MESSAGE" VARCHAR2(4000 CHAR));
3:将表jivemsg中的数据导入到表jivemsg2中
这步是关键,由于long类型不能直接转换成varchar2。
所以这边用了一个别人写的function来解决。
INSERT INTO JIVEMSG2 select uri,sender,receiver,creationdate,messagetype,messagesize, long_to_char(rowid,'ucstar6','jivemsg','message'),fkdomain,version,flags,receivername,sendername from jivemsg msg;
函数:
/* 其中in_rowid为行id,in_owner为数据库登陆的帐号名,in_table_name为数据库表名,in_column为数据库对应long类型的表字段名称 */
CREATE OR REPLACE FUNCTION LONG_TO_CHAR( in_rowid rowid,in_owner
varchar,in_table_name varchar,in_column varchar2)
RETURN varchar AS
text_c1 varchar2(32767);
sql_cur varchar2(2000);
--
begin
sql_cur := 'select '||in_column||' from
'||in_owner||'.'||in_table_name||' where rowid =
'||chr(39)||in_rowid||chr(39);
dbms_output.put_line (sql_cur);
execute immediate sql_cur into text_c1;
text_c1 := substr(text_c1, 1, 4000);
RETURN TEXT_C1;
END;
/
4:删除表jivemsg,并将jivemsg2更名为jivemsg
DROP TABLE jivemsg;
RENAME JIVEMSG2 TO jivemsg;
分享到:
相关推荐
"hibernate映射Oracle中LONG类型" Hibernate 框架映射 Oracle 中的 LONG 类型字段是一种复杂的技术问题。Oracle 中的 LONG 类型字段是一种特殊的数据类型,用于存储可变长字符串,最大长度限制是 2GB。这与 Java ...
在Oracle数据库中,LongRaw和Blob都是用于存储大对象(LOB)的数据类型,但它们有各自的特点和适用场景。在某些情况下,可能需要将LongRaw字段转换为Blob字段,这通常是因为Blob提供更好的管理和处理大型二进制数据...
Oracle数据库中,LongRaw和Blob是两种不同的数据类型,它们分别用于存储大对象(LOB)数据。LongRaw类型是Oracle的原始数据类型,用于存储二进制大对象,而Blob类型则是二进制大型对象,更适合存储大量的二进制数据...
然而,在实际应用中,我们经常需要在 Oracle 和 DB2 之间进行数据类型的转换和对应,这就需要我们对 Oracle 和 DB2 的数据类型有深入的了解。 在本文中,我们将对 Oracle 和 DB2 的数据类型进行分类和对应说明,...
本文将深入探讨SQL Server与Oracle中的数据类型区别,并通过具体的例子来说明这两种系统之间的转换方法。 ### SQL Server 数据类型 SQL Server 是微软开发的一款关系型数据库管理系统,它支持多种数据类型,可以...
- **数据类型转换**:Oracle中的`DATE`和`TIMESTAMP`类型会被转换为MySQL中的`DATETIME`类型,需要注意精度问题。 - **NUMBER类型的处理**:超大的`NUMBER`类型会直接转换为`BIGINT`,需要注意可能的精度损失。 - **...
在探讨“数据库中CLOB类型转换的问题”这一主题时,我们首先需要理解CLOB(Character Large Object)数据类型的基本概念及其在数据库中的应用场景。随后,将深入分析CLOB类型转换过程中可能遇到的问题,并提供相应的...
1. **数据类型**:Oracle支持的数据类型如NUMBER、LONG、RAW等在MySQL中可能需要转换为DECIMAL、TEXT或BLOB。例如,Oracle的NUMBER可以转换为MySQL的DECIMAL或FLOAT,LONG可以转换为TEXT。 2. **分页查询**:Oracle...
1. **数值类型**:int、decimal、long、short等对应Oracle的NUMBER,bool对应PL/SQL的BOOLEAN。 2. **字符串类型**:string对应Oracle的VARCHAR2或CHAR,DateTimeOffset对应TIMESTAMP WITH TIME ZONE。 3. **日期/...
可以使用Oracle中的TO_CHAR()函数来将DATE类型转换为字符串,然后与DB2/400中的DATE类型匹配。 二、VARCHAR2和CHAR类型 Oracle中的VARCHAR2类型可以对应DB2/400中的CHAR类型和VARCHAR类型。当n时,可以使用DB2/...
在Oracle数据库中,有多种数据类型用于存储不同类型的数据,其中包括Long、Raw和Blob。这些字段类型各有其特性和用途,下面我们将详细探讨它们,并通过一个简单的示例来展示如何在Oracle数据库中对这些类型进行读写...
在转换之前,需要查看表中的数据类型,特别是长 Raw 类型和 LONG RAW 类型,因为这些类型无法进行分区表。可以使用以下 SQL 语句来查看数据类型: ```sql SELECT COUNT(*) FROM EMP; ``` 步骤三:创建分区表 创建...
本篇文章将详细阐述Microsoft SQL Server 2000与Oracle数据库中的数据类型对比及其转换对应关系,帮助读者更好地完成数据迁移任务。 #### 1. 整数类型 - **SQL Server 2000**: - `bigint`: 存储非常大的整数值,...
例如,当你从数据库查询数据时,需要知道如何将 Oracle 的 `NUMBER` 类型转换为 Java 中的 `BigDecimal`,或者如何处理 `TIMESTAMP` 类型以考虑时区信息。理解这些细节将确保数据的准确性和应用程序的兼容性。
在使用 WebLogic 服务器进行应用程序开发时,尤其是在处理 Oracle 数据库中的 CLOB 类型数据时,开发者可能会遇到类型转换的问题。本文将详细介绍如何通过反射机制来解决 WebLogic 环境下 Oracle CLOB 类型转换成 `...
下面将详细介绍这两种数据类型以及如何在Oracle中使用它们存储和读取图片。 1. **CLOB数据类型**: `CLOB`数据类型用于存储大量的字符数据,最大可达到4GB。虽然主要用于存储文本,但在本例中,由于图片可以被转换...
本文将详细介绍Oracle中的各种数据类型及其特性,帮助初学者更好地理解如何根据不同的应用场景选择合适的数据类型。 #### 1. 字符类型 - **CHAR(n)**:固定长度字符类型,`n`范围为1到2000,默认情况下,如果未...
"Oracle表转实体类工具"是一种实用的开发辅助软件,它能自动化地将Oracle数据库中的表结构转换为Java实体类代码,极大地提高了开发效率。这个工具能够自动分析表的字段、数据类型,并生成对应的Java属性,同时还能...
- Java 的基本数据类型如 byte, short, int, long, float, double, boolean 与 Oracle9i 中的某些数字类型相对应。 - String 类型用于存储文本,与 Oracle9i 中的 CHAR 和 VARCHAR2 类型匹配。 - Date 和 ...
BINARY_INTEGER是Oracle中用于整数计算优化的类型,而DEC、DOUBLE PRECISION、INTEGER、INT、NUMERIC和REAL都是NUMBER类型的子类型,其中DOUBLE PRECISION提供了更高的精度,而REAL和NUMERIC等同于NUMBER。...