oracle更改字段,表名和复制一列的数据

create table TestA
(
  NID      NUMBER not null,
  FNAME    VARCHAR2(40),
  PLACE    VARCHAR2(40),
  PRICE    NUMBER,
  a VARCHAR2(10)
)


insert into TestA  values (1,'李达','北京',123,'你好');
insert into TestA  values (2,'浩达','上海',1234,'好');
insert into TestA  values (3,'熊爱华','南京',153,'到好');
insert into TestA  values (4,'离线','吉林',183,'你');
commit;


select * from TestA


增加一列:
alter table TestA add b varchar2(10);
alter table TestA add d varchar2(10);
alter table TestA add e varchar2(10);
删除一列:
alter   table  TestA drop  column  b;


更改字段名:
1.把TestA 中的列 a 改为 c
alter table  TestA rename  column  a to c;  


2.把 TestA 表重命名为 TestB 表
alter table  TestA rename to TestB;


select * from TestB for update


 -------------------将一列的数据更新到另一列,可以用CAST函数进行数据类型转换


 UPDATE 表名 SET 字段名 = CAST(字段名1 AS VARCHAR2(30));


 update TestB set d = cast(price as int);------整数--------

 update TestB set e = price;


oracle更改字段,表名和复制一列的数据_第1张图片


-----Oracle修改字段类型和长度语句:
1、假设字段数据为空时,则不管改为什么字段类型,都可以直接执行:
ALTER TABLE tableName modify(columnName 类型);
例如:
alter table TestB modify(f varchar(255));


2、假设字段里有数据,则改为nvarchar2(30)可以直接执行:
alter table TestB modify (e nvarchar2(30));


3、假设字段有数据,则改为varchar2(30)执行时会弹出:"ORA-01439:要更改数据类型,则要修改的列必须为空",
这时要用上面的方法来解决这个问题:
--------修改原字段名 price 为 price_tmp
alter table TestB rename column price to price_tmp;


----------增加一个和原字段名同名的字段name
alter table TestB add price varchar2(40);


--------将原字段 price_tmp 数据更新到增加的字段 price
update TestB set price=trim(price_tmp);


---更新完,删除原字段 price_tmp
alter table TestB drop column price_tmp;


注意:字段没有数据或修改的新类型和原类型兼容时,可以直接modify修改,否则要新建间接字段来转移

你可能感兴趣的:(oracle,sql)