經常需要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...