ORACLE 當字段中有資料如何修改字段型別

2022-02-16 03:28:07 字數 2813 閱讀 9370

建立檢視的時候,因為表太多,裡面一些字段型別不一樣,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;

我第四步中是擷取前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

orreplace

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...