1.所有的表中字符的地方我都用的nvarchar2
2.我想替换成varchar2有没有一种方式能够一起把nvarchar2变为varchar2
我建立了50个表,如果要是一个个改太麻烦了.
2.我想替换成varchar2有没有一种方式能够一起把nvarchar2变为varchar2
我建立了50个表,如果要是一个个改太麻烦了.
解决方案 »
- progress编程的几个问题,请指教
- 请教一Sql
- oracle 中怎么用函数控制游标实现如mssql中的滚动游标的效果
- ?????实体化视图更新问题
- What statement would you issue on the preceding EMPLOYEE_TABLE to allow the MIDDLE_NAME column to accept NULL values?
- 如何将多个日期转化成数值后求平均值
- 求助,存储过程中能不能将表名做为参数传进去,急!!
- 发个帖子,明天结帖!!!
- 弱智问题.包测试!!!
- 想从sqlserver转到oracle,对sql server比较熟练,该看些什么书呢?
- 关于sql语句的问题
- 关于oracle group by的问题
' nvarchar2(10);'
FROM DBA_TAB_COLUMNS XX
WHERE OWNER = 'ZFTANG'
AND DATA_TYPE = 'NVARCHAR2'
' nvarchar2('||XX.DATA_LENGTH ||');'
FROM DBA_TAB_COLUMNS XX
WHERE OWNER = 'ZFTANG'
AND DATA_TYPE = 'NVARCHAR2'
如果没有数据,可以查询字典表来生成修改脚本,如:
SELECT 'alter table ' || table_name || ' modify (' || t.COLUMN_NAME ||
' varchar2(' || t.CHAR_LENGTH || '));'
FROM user_tab_columns t
WHERE t.DATA_TYPE = 'NVARCHAR2';
begin
for c in (select *
from user_tab_columns t1
where t1.DATA_TYPE = 'NVARCHAR2'
) loop
execute immediate 'alter table ' || c.table_name || ' add g_w_' || c.column_name || ' varchar2(' || c.char_length || ')';
execute immediate 'update ' || c.table_name || ' set g_w_' || c.column_name || ' = ' || c.column_name;
execute immediate 'update ' || c.table_name || ' set ' || c.column_name || ' = null';
execute immediate 'alter table ' || c.table_name || ' modify ' || c.column_name || ' varchar2(' || c.char_length || ')';
execute immediate 'update ' || c.table_name || ' set ' || c.column_name || ' = g_w_' || c.column_name;
execute immediate 'alter table ' || c.table_name || ' drop column g_w_' || c.column_name;
end loop;
end;
当然,我引用的方法更加合理些。