ORACLE 当字段中有数据如何修改字段类型

创建视图的时候,因为表太多,里面一些字段类型不一样,PL/SQL报错,为‘表达式必须具有对应表达式相同的数据类型’,发现后,一个字段的类型为CLOB和VARCHAR2(4000)两种,将CLOB进行修改

将CLOB字段修改成varchar2(4000)字段

第一步:把原字段换个名字,此条的sql是把C_009700010003换成C_0097000100031

alter table 表名 rename column  当前字段 to 备用字段;

alter table T_00970001 rename column  C_009700010003 to C_0097000100031;

第二步:在表中添加一个原字段名字C_009700010003 ,并把类型定义自己想改变的类型, 此条是定义VARCHAR2类型

alter table 表名 add 新增字段名称 字段类型;

alter table T_00970001 add C_009700010003 VARCHAR2(4000);

第三步:养成良好的习惯,将字段名称进行备注,以免以后忘记字段名称。

comment on column T_00970001.C_009700010003 is ‘处罚事由‘;

第四步:这条语句是把备份的C_0097000100031字段内容 添加到新建字段C_009700010003 中来,这条语句就是把CLOB类型的数据转换成varchar2类型在插入到新定义的C_009700010003

update 表名 set 新增字段名称 = dbms_lob.substr(备用字段,4000);

update T_00970001 set C_009700010003 = dbms_lob.substr(C_0097000100031,4000);

第五步:把备份字段C_0097000100031去掉

alter table T_00970001 drop column C_0097000100031;

第四步的dbms_lob的用法,我整理了下:

我第四步中是截取前4000.

CLOB里存的是2进制

判定长度   DBMS_LOB.GETLENGTH(col1)

获取文本   DBMS_LOB.SUBSTR(col1,n,pos)

DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节

DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB变量保存的全部数据

DBMS_LOB.FILECLOSE(IMG_BFILE)关闭文件

clob转化为字符串,SELECT  
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(col1,10,1))
  FROM   tab1;

如果clob中包含空格则不能使用。

将clob类型转化成字符串

create  
or  
replace  
function   getclob(

table_name            
in   varchar2,

field_id              
in   varchar2,

field_name            
in   varchar2,

v_id                  
in   number,

v_pos                 
in  
number)  
return   varchar2

is

lobloc                
clob;

buffer                
varchar2(32767);

amount                
number  
:=   2000;

offset                
number  
:=   1;

query_str             
varchar2(1000);

begin

query_str   :=
‘select   ‘||field_name||
‘  
from   ‘||table_name||
‘  
where   ‘||field_id||
‘=  
:id   ‘;

EXECUTE  
IMMEDIATE  
query_str  
INTO  
lobloc  
USING   v_id;

offset:=offset+(v_pos-1)*2000;

dbms_lob.read(lobloc,amount,offset,buffer);

return   buffer;

exception

when  
no_data_found   then

return   buffer;

end;

当然了,还有一个更简单的方法。

那就是

先利用第三方工具软件PL/sql把数据导出来,而后修改数据结构,即修改数据类型,最后就重新往新的表插入数据。
alter table filename
modify 字段名 varchar2(4000)

原文地址:https://www.cnblogs.com/jianshuai520/p/9749730.html

时间: 2024-10-12 11:27:12

ORACLE 当字段中有数据如何修改字段类型的相关文章

【SQL Server】sql server更改了数据表的字段/新增数据表的字段 无法保存

sql server更改了数据表的字段/新增数据表的字段  无法保存 解决方法:进入 工具-->选项-->Designers-->表设计器和数据库设计器-->取消勾选   即可

003杰信-在oracle数据库中插入数据,当字段允许为空时要特殊处理

本博客的内容全部来自于传智播客,特在此说明. 业务要求如下:在jsp页面上输入数据时,转到后台,并输入到数据库. jsp页面: 数据库的字段设计: 注意: 当jsp页面上有些字段内容为空,因为数据库那些字段允许为空,所以以为这样做不会有错,其实Mysql开发时是可以的,但是用oracle时不行. 在用Mybatis时,在写Mybatis的配置文件时要这么写: <insert id="insert" parameterType="cn.itcast.jk.domain.F

批量修改字段中不规则的部分

需求:mysql数据表中有img字段,其中包括下面三条数据,我想把图片名保留下来,前面的部分改成自己想要的部分,即下面三条数据,其实这个字段的数据远不止三条,这里只是个例子. http://s29.9956.cn/product/40/ac/40ace1babb133e1ea17f09932dd2e508.jpg http://s29.9956.cn/product/cf/f8/cff815dabb3555cf1df47388baa32b84.jpg http://s29.9956.cn/pro

Oracle中已有数据的字段类型修改

创建测试表 create table t_person( id varchar2(200) primary key, name varchar2(200), address varchar2(200) ); 向测试表中插入数据 insert into t_person(id,name,address) values(sys_guid(),'zhangsan','beijing'); insert into t_person(id,name,address) values(sys_guid(),'

oracle数据库的建表,删除字段,添加字段,修改字段,修改字段......

1. 使用oracle创建一张表: SQL> create table loginuser( 2 id number(10,2), 3 username varchar(20), 4 password varchar(20), 5 email varchar(30), 6 descriable varchar2(200), 7 regdate date); 创建表的语法: CREATE TABLE table_name( columns_name datatype,...... ); 显示创建表

【Oracle】给clob字段插入数据

// 插入 //OracleCommand cmd = "insertInto into GIS_PolygonPoint(PCode,PointColl) values('140134', :var)"; // 修改 //OracleCommand cmd = new OracleCommand("update yd_line set coord=:coordstr where lineid=" + LineId.ToString(), conn); string

Oracle 修改字段注释

修改字段注释SQL: COMMENT ON COLUMN 表名.字段名 IS '注释内容'; 批量修改所有表的字段注释,这里是修改所有没有注释的字段 附件: 实现步骤: 1.利用SQL找出所有没有注释的字段,导出查询结果 2.将查询结果正则替换注释修改SQL语句 3.手动修改注释修改SQL语句中的注释内容(这里没办法自动了,内容不是统一的),运行注释修改SQL语句块 实现参考文章: oracle 中出现表名:BIN$2cMp4FjwQ2Cw3Lj+BxLYTw==$0 - http://fern

Oracle 修改字段顺序的两种方法

分类: Oracle 如果要修改字段顺序,一般情况可以使用以下步骤: --(1)备份目标表数据 create table 临时表 as select * from 目标表; --(2)drop 目标表 drop table 目标表; --(3)再重新按照要求的字段顺序建表; create table 临时表 (col1,................coln); --(4)之后用select将数据从临时表导回. 此外,还可以通过修改sys的数据字典来实现.以下是自己的亲身测试记录 --第1步

oracle如何修改字段类型(2)

在一次做开发的时候,遇到需要将数据表的字段类型由number改成varchar,可是该字段又有值, 用  alter table t-name modify cname newType;会报错. 话说,当时在网上没找到合适的解决办法,很苦恼! 今天在博客园看到解决这个问题的办法,很nice,分享! 当要修改的字段有值的时候,不能更改字段类型: 两种解决办法: 1.   > 新增一列,列类型与要修改的新类型一致: >将旧列的值赋给新列(需强制类型转换): > update tname se