`
wuhaidong
  • 浏览: 349198 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Oracle中long类型表的转换!

 
阅读更多

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;

分享到:
评论

相关推荐

    oracle LongRaw 转 Blob 源码

    oracle LongRaw 转 Blob 源码 看见有人要求要源码,就发上来了,找了N久,撸主基本不保存源码的!

    oracle LongRaw 转 Blob

    本人开发的oracle数据库LongRaw字段转Blob字段工具,可以指定表名,字段名,条件,开发环境Win7,Oracle xe,VS2010;需要源码修改的发私信

    图片存入Oracle中,用clob和blob两种方式

    简单写的一个小工具,把图片存入oracle中,按clob和blob两种方式存储,并读取图片

    Oracle数据库恢复工具Oracle Database Unloader(ODU)3.09

    ODU全称为Oracle Database Unloader,是类似于Oracle的DUL的软件,用于直接从Oracle数据库的数据文件中获取表数据。在各种原因造成的数据库不能打开时,用于抢救数据,最大限度地减少数据丢失。 ODU有什么功能特点...

    oracle数据库修复

    支持多种字符集之间的转换,能够正确的转换CLOB、NCLOB、NVARCHAR2列类型的数据到指定的字符集。 自动检测数据文件的表空间号和文件号 导出的数据格式包括纯文本和DMP文件两种。以纯文本导出时,能够自动生成建表...

    赤兔Oracle数据库恢复软件 v11.6.zip

    31.支持对误删除数据的恢复,即使被删除数据的表中有LOB列,即使被删除数据的表中对应row directory中所有记录的offset都已经完全被Oracle清除 赤兔Oracle数据库恢复软件软件安装   把下载好的安装包解压到...

    Oracle8i_9i数据库基础

    §1.7 ORACLE数据类型 38 §1.8 SQL 语句基础 44 §1.8.1 SQL语句所用符号 44 §1.8.2 简单select 查询 45 §1.9 伪列及伪表 46 §1.10 使用SQL Worksheet工作 46 第二章 查询基础 50 §2.1 SELECT语句 50 §2.2 SQL...

    一个oracle客户端(oracle sql handler)

    多线程、多连接、智能/彩色SQL编辑器、中英文双语界面并能切换、支持 PL/SQL、批量SQL运行、高效的块操作、方便的表格操作,不需要安装 Oracle 客户端,能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac ...

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

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

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

    日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...

    数据库表数据转为insert sql语句

    比如ms sql server中的image,oracle中的blob,clob,long以及db2中dbclob,graphic,long vargraphic等类型. 这个工具是本人利用闲暇时间所写,欢迎大家提意见.也可以向我索取源码. maito: henry.dhl@gmail.com ...

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

    例:将test表中的Count列宽度加长为10个字符 sql>alter atble test modify (County char(10)); b、将一张表删除语句的格式如下: DORP TABLE 表名; 例:表删除将同时删除表的数据和表的定义 sql>drop table ...

    oracle知识简介

    LONG 存储最大长度为2GB的变长字符数据一个表中只限有一列有LONG 不能为主键,唯一约束 要现实使用中要将LONG转为CLOB NUMBER(p,s) p为有效数字的个数 , s为小数位数 NUMBER(p) p为有效数字的整数 NUMBER 表示精度...

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

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

    数据库基础 ORACLE

    §2.5.4 LONG(长类型显示字节数) 84 §2.5.5 PAGESIZE(页行数) 84 §2.5.6 PAUSE(暂停) 84 §2.5.7 SPACE(列间空格) 84 §2.5.8 Termout (启/停屏幕显示) 85 §2.5.9 ECHO (启/停命令显示) 85 §2.5.10 TRANSACTION ...

    Oracle事例

    当指定时,如果父表中的记录被删除,则依赖于父表的记录也被删除 REFERENCE 表名() on delete cascade; 7、删除带约束的表 Drop table 表名 cascade constraints; 8:索引管理 <1>.creating function-based...

    oracle详解

    导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理...

    oracle文本导入导出工具-ozoradts

    buffer = 转换缓冲区大小 (UNIT:MB 默认16) reclen = 记录最大长度,8-2048 (默认2048) parallel = 并行导入 (默认FALSE) skip = Number of logical records to skip (默认0) load = Number of logical records ...

Global site tag (gtag.js) - Google Analytics