Din*_*Din 3 sql oracle oracle11g
我在Oracle 11g中有一个表(包含数据),我需要使用Oracle SQLPlus来执行以下操作:
目标:改变列的类型TEST1表UDA1从number到varchar2.
建议方法:
以下不起作用.
create table temp_uda1 AS (select * from UDA1);
update UDA1 set TEST1 = null;
commit;
alter table UDA1 modify TEST1 varchar2(3);
insert into UDA1(TEST1)
select cast(TEST1 as varchar2(3)) from temp_uda1;
commit;
Run Code Online (Sandbox Code Playgroud)
与索引有关(保留顺序),对吧?
a_h*_*ame 26
create table temp_uda1 (test1 integer);
insert into temp_uda1 values (1);
alter table temp_uda1 add (test1_new varchar2(3));
update temp_uda1
set test1_new = to_char(test1);
alter table temp_uda1 drop column test1 cascade constraints;
alter table temp_uda1 rename column test1_new to test1;
Run Code Online (Sandbox Code Playgroud)
如果列上有索引,则需要重新创建它.
请注意,如果旧列中的数字大于999,则更新将失败.如果这样,则需要调整varchar列的最大值
将新列添加为varchar2,将数据复制到此列,删除旧列,将新列重命名为实际列名:
ALTER TABLE UDA1
ADD (TEST1_temp VARCHAR2(16));
update UDA1 set TEST1_temp = TEST1;
ALTER TABLE UDA1 DROP COLUMN TEST1;
ALTER TABLE UDA1
RENAME COLUMN TEST1_temp TO TEST1;
Run Code Online (Sandbox Code Playgroud)
查看Oracle的软件包DBMS_REDEFINE。运气好的话,您可以在不停机的情况下在线进行操作(如果需要)。否则,您可以:
VARCHAR2列update复制NUMBER到VARCHAR2NUMBER柱VARCHAR2栏| 归档时间: |
|
| 查看次数: |
62845 次 |
| 最近记录: |