oracle 批量更改所有表的同一字段型別

2021-07-26 05:28:56 字數 2050 閱讀 7514

經常需要oracle中的所有的字段的型別更改為另外乙個型別,可以考慮利用如下**:此處的demo為將nvarchar2轉為varchar2型別並且字段長度保持不變。

declare

cursor c_tab is select * from user_tab_columns t where t.data_type = 'nvarchar2';

r_tab user_tab_columns%rowtype;

v_cell varchar2(100);

sql_str varchar2(1000);

data_length number;

begin

open c_tab;

loop

fetch c_tab into r_tab;

exit when c_tab%notfound;

v_cell:='';

data_length:=trunc(r_tab.data_length/2,0);

sql_str:='select

max('||r_tab.column_name||') from

'||r_tab.table_name;

dbms_output.put_line('sql_str: '||sql_str);

execute immediate sql_str into v_cell;

commit;

dbms_output.put_line('

value: '||v_cell);

dbms_output.put_line('

table name: '||r_tab.table_name||'

column name: '||r_tab.column_name||' length: '||r_tab.data_length);

--1. 修改原欄位名

sql_str:='

alter

table

'||r_tab.table_name||' rename column

'||r_tab.column_name||'

to temp_column';

dbms_output.put_line('sql_str: '||sql_str);

execute immediate sql_str;

commit;

--2. 新增乙個和原欄位同名的字段

sql_str:='

alter

table

'||r_tab.table_name||'

add'||r_tab.column_name||' varchar2('||data_length||')';

dbms_output.put_line('sql_str: '||sql_str);

execute immediate sql_str;

commit;

--3. 將原來的資料更新到新字段中,這是要注意,一定要顯示進行資料型別轉換

sql_str:='

update

'||r_tab.table_name||'

set'||r_tab.column_name||' = cast(temp_column as varchar2('||data_length||'))';

dbms_output.put_line('sql_str: '||sql_str);

execute immediate sql_str;

commit;

--4. 刪除原來的備份字段

sql_str:='

alter

table

'||r_tab.table_name||'

drop

column temp_column';

dbms_output.put_line('sql_str: '||sql_str);

execute immediate sql_str;

commit;

end loop;

close c_tab;

end;

參考資料:

批量更改ORACLE中表 索引的表空間

oracle中表 索引的表空間的批量更改方法 1 查詢當前使用者下的所有表 select alter table table name move tablespace tablespacename from user all tables select alter table table name ...

批量更改資料庫表的所有者

在客戶的資料庫中執行我們的程式時,有時會出現下面錯誤資訊。檢視資料庫表卻發現此表仍然存在,但注意到其所有者不是通常的dbo,而是變成了其它,比如bcs。我們的程式要求資料庫表的所有者為dbo,否則會出錯。那麼如何將資料庫中這些所有者不為dbo的表,變成所有者為dbo呢?執行以下語句可以很方便地批量更...

linux批量更改檔案所有者

剛學完shell指令碼基礎知識,剛才改變資料夾的所有使用者時,突然想到能不能寫個指令碼批量更改,於是就有了這個。1 bin bash 2 ecoding utf 8 3 4 5 先過濾出第乙個檔案的所有者,名字賦給str 6 i 1 7 str echo e ls l n grep d grep a...