El siguiente ejemplo es para modificar el tipo del campo AUDIT_USERNAME en todas las tablas a varchar2 (200), y la declaración se puede cambiar según las necesidades reales.
declare
-- 修改表字段长度的字符串
v_alter_sqlstr varchar2(500);
-- 游标
cursor c_result is
select t_column.TABLE_NAME,
t_column.column_name,
t_column.data_length,
'alter table ' || t_column.table_name || ' modify ' || t_column.column_name ||
' varchar2(200)' as alter_sqlstr
from user_tab_cols t_column where column_name in ('AUDIT_USERNAME');
-- 定义一个与游标一样的变更
v_result c_result%rowtype;
begin
open c_result;
loop
fetch c_result into v_result;
exit when c_result%notfound;
v_alter_sqlstr := v_result.alter_sqlstr;
--dbms_output.put_line(v_alter_sqlstr || ';'); -- 可单独将SQL从output窗口提取出来执行
-- 执行修改
execute immediate v_alter_sqlstr;
end loop;
close c_result;
exception
when others then
begin
dbms_output.put_line('异常:' || 'sqlcode:' || sqlcode || ' sqlerrm : ' ||sqlerrm );
end;
end;