建立檢視的時候,因為表太多,裡面一些字段型別不一樣,pl/sql報錯,為『表示式必須具有對應表示式相同的資料型別』,發現後,乙個欄位的型別為clob和varchar2(4000)兩種,將clob進行修改
將clob欄位修改成varchar2(4000)字段
第一步:把原欄位換個名字,此條的sql是把c_009700010003換成c_0097000100031
alter table 表名 rename column 當前字段 to 備用字段;
altertable t_00970001 rename column c_009700010003 to c_0097000100031;
第二步:在表中新增乙個原欄位名字c_009700010003 ,並把型別定義自己想改變的型別, 此條是定義varchar2型別
alter table 表名 add 新增欄位名稱
字段型別;
altertable t_00970001 add c_009700010003 varchar2(4000);
第三步:養成良好的習慣,將欄位名稱進行備註,以免以後忘記欄位名稱。
comment oncolumn 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去掉
altertable t_00970001 drop
column c_0097000100031;
我第四步中是擷取前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型別轉化成字串
createorreplace
function
getclob(
table_name
invarchar2
, field_id
invarchar2
, field_name
invarchar2
, v_id
innumber
, v_pos
innumber) return
varchar2
islobloc 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 表中有資料的情況下 字段更改資料型別
原表為enterprise 將其主鍵enterpriseid 的number型別替換為varchar 21 方法一 create table enterprise1 as select from enterprise where 1 2 alter table enterprise1 modify ...
oracle修改有資料的字段屬性
正常情況下,有資料時不能直接修改屬性,我們可以先備份,然後清空現有資料,然後再修改和還原,過程如下 先快取表 create table t table1 as select from tabletest 刪除原表所有資料 delete from tabletest 修改字段 alter table ...
oracle 修改有資料的表字段型別
如果欄位有資料,則oracle不允許直接修改表的字段型別 如果字段沒有資料,可以修改表字段型別 先對原來的字段從命名 新增乙個新的字段,跟原來欄位名字一致,新增備註 將資料複製到新的字段中 給表的字段重新命名 alter table ea.lms goods notice rename foreca...