oracle数据库修改表中列

0123456789Archer 2011-03-18 01:20:20
create table zchw(
c1 char
c2 varchar2(14)
c3 number(12)
);
我想在C3前面插入一列怎么做
ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);
老出错呜呜;
...全文
172 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luoyoumou 的回复:]
SQL code
-- drop table zchw purge;
create table zchw(
c1 char,
c2 varchar2(14),
c3 number(12)
);

alter table zchw add c4 number(3);
alter table zchw add c5 number(12);
update zchw set c5=c3……
[/Quote]
正解

想问下列的顺序那么重要吗? 在select 后面调整下要查询列的位置不就可以了吗?
梦之翼-凯 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lyongt 的回复:]
#1楼回答是对的,简单,也不会导致已有的数据丢失,赶快给人家加分吧
[/Quote]
同意!!结贴吧!
kingtiy 2011-03-18
  • 打赏
  • 举报
回复
数据库设计规范里就有说明,表设计的时候,字段列的顺序是没有关系.
Lyongt 2011-03-18
  • 打赏
  • 举报
回复
#1楼回答是对的,简单,也不会导致已有的数据丢失,赶快给人家加分吧
ora-0600 2011-03-18
  • 打赏
  • 举报
回复
【方法一:】

你可以这样试试:
ALTER TABLE zchw ADD (c4 number(3));
这样在数据库表中,c4会排在c3前面,

然后,用SYSTEM登录sqlplus进行操作:
SQL> select object_id from all_objects where owner='SCOTT' and object_name='zchw';
//【SCOTT是指你的数据库用户名,zchw是指你的数据库表名,all_objects系统表名】
显示结果,例如:
OBJECT_ID
----------
6067

然后
SQL> select obj#,col#,name from sys.col$ where obj#=6067;
显示结果,例如:
OBJ# COL# NAME
--------------------
6067 1 c1
6067 2 c2
6067 3 c3
6067 4 c4
然后调整字段的顺序:
SQL> update sys.col$ set COL#=5 where obj#=6067 and NAME='c3';
1 row updated.
SQL> update sys.col$ set col#=3 where obj#=6067 and NAME='c4';
1 row updated.
SQL> update sys.col$ set col#=4 where obj#=6067 and NAME='c3';
1 row updated.
SQL> commit;
完成.
由于数据字典是在数据库启动时加载到SQL中的,所以修改完成之后,还需要重启数据库服务。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.
这时,再查看,就会发现修改已经成功。
SQL> desc zchw;
查看一下你的表中的字段吧!

【方法二:】
重新创建表,可以重新运行一下正确的sql脚本
create table zchw(
c1 char,
c2 varchar2(14),
c3 number(12),
c4 number(3)
);
比较简便。。。。

希望对你有帮助。。。
Well 2011-03-18
  • 打赏
  • 举报
回复
没办法。。只能删除重建。。。因为oracle没有和sql server这样的功能。。可以先把数据保存在临时表里。。其实字段有顺序也没多大用处。。
luoyoumou 2011-03-18
  • 打赏
  • 举报
回复
-- drop table zchw purge;
create table zchw(
c1 char,
c2 varchar2(14),
c3 number(12)
);

alter table zchw add c4 number(3);
alter table zchw add c5 number(12);
update zchw set c5=c3;
alter table zchw drop column c3;
alter table zchw rename column c5 to c3;

0123456789Archer 2011-03-18
  • 打赏
  • 举报
回复
是我写错了,还是根本就不存在这中SQL语句,明白不?
0123456789Archer 2011-03-18
  • 打赏
  • 举报
回复
都说了你的做法我早就会了,ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);这句我无意中看
我不知道这个写得对不对求证明白了吧,
luoyoumou 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zichuanxiu904 的回复:]

1楼我没说你的错了。我说的是我的sql语句我纠结
ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);这句话我不知道错在哪里。。。。。
[/Quote]

-- 我现在的语句都贴出来啦,你还不知道错在哪里?真是无语啦:那我的语句算是白贴啦!......
0123456789Archer 2011-03-18
  • 打赏
  • 举报
回复
1楼我没说你的错了。我说的是我的sql语句我纠结
ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);这句话我不知道错在哪里。。。。。
luoyoumou 2011-03-18
  • 打赏
  • 举报
回复
-- 我执行怎么没有错误呢?
eygle@SZTYORA> drop table zchw purge;

表已删除。

eygle@SZTYORA> create table zchw(
2 c1 char,
3 c2 varchar2(14),
4 c3 number(12)
5 );

表已创建。

eygle@SZTYORA>
eygle@SZTYORA> alter table zchw add c4 number(3);

表已更改。

eygle@SZTYORA> alter table zchw add c5 number(12);

表已更改。

eygle@SZTYORA> update zchw set c5=c3;

已更新0行。

eygle@SZTYORA> alter table zchw drop column c3;

表已更改。

eygle@SZTYORA> alter table zchw rename column c5 to c3;

表已更改。

eygle@SZTYORA>
0123456789Archer 2011-03-18
  • 打赏
  • 举报
回复
3楼的方法也很好,不过不是我想要的谢谢
0123456789Archer 2011-03-18
  • 打赏
  • 举报
回复
谁想喷我,我没意见,一楼的我很感谢
0123456789Archer 2011-03-18
  • 打赏
  • 举报
回复
不好意思早上人不在
如果不在乎这句话我就不会写出来,1楼的方法我会所以我不想给分,ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);
这句话一直报错所以我很纠结想找人找出问题所在

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧