oracle数据库如何修改字段的数据类型?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库如何修改字段的数据类型?相关的知识,希望对你有一定的参考价值。
参考技术A1、首先打开plsql,连接上oracle数据库,假设有一张数据库表叫做 tblTest,通过sql查询也可以看出,这里面是有测试数据的。
2、oracle数据库添加列,比如,往测试表 tblTest 添加一个 日期类型的列 UpdateDate,sql语句就可以像下面这样实现,写完SQL之后,选中这一行sql,点击plsql左上角次轮状的图标执行sql语句:alter table TBLTEST add UpdateDate date;
3、执行成功之后,通过 select * from TBLTEST ,就能看到新添加的列默认都是空值。
4、oracle数据库删除列,比如,将上一步添加的 UpdateDate 列删除掉,就可以使用下面的sql语句修改表:alter table tbltest drop column updatedate;
5、执行成功后,再次使用 select * from TBLTEST ,就能看到 UpdateDate 列已经删除了。
6、oracle数据库修改列属性,比如,将测试表 tblTest 中 INTEGER 类型的 ITEMNUM 列修改为 number 类型,就可以使用下面的SQL语句:alter table tbltest modify ITEMNUM number;
7、在左侧 tbltest 表名上,点击鼠标右键,选择【Edit】选项,
8、然后在右侧出现的窗口中,点击【Columns】标签页,就能看到ITEMNUM已经从 INTEGER 改为 number 类型了。
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)
以上是关于oracle数据库如何修改字段的数据类型?的主要内容,如果未能解决你的问题,请参考以下文章