在Oracle中更改关键字后的表

时间:2012-01-19 07:49:23

标签: oracle oracle11g ddl alter-table

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL AFTER column2;

为什么我也不能在Oracle中使用mySql语法?以上命令适用于MySql。你能给我一个有效的等价物吗?


Error report:
SQL Error: ORA-01735: invalid ALTER TABLE option
01735. 00000 -  "invalid ALTER TABLE option"

我在询问是否有任何方法可以在我提供的Oracle命令中使用after子句?

3 个答案:

答案 0 :(得分:18)

因为SQL是关系代数。它并不关心“where”列位于表中,只关注它们是否存在。

要在Oracle中使用它,只需删除after子句。 alter table的Oracle文档是here,但归结为:

alter table testTable
    add ( column1 number(1) default 0 not null )

after命令有 no alter table子句。

答案 1 :(得分:12)

Oracle不支持在表的中间添加列,只将它们添加到结尾。您的数据库设计和应用程序功能不应该依赖于数据库模式中的列顺序。毕竟,您始终可以在select语句中指定订单。

但是,如果出于某种原因,您只需在表格中间放置一个新列就可以解决问题。

CREATE TABLE tab1New AS SELECT 0 AS col1, col1 AS col2 FROM tab1;
DROP TABLE tab1 PURGE;
RENAME tan1New to tab1;

SELECT 0 AS col1是新列的位置,然后根据需要从原始表中指定其他列。将SELECT 0 AS col1按照您想要的顺序放在适当的位置。

之后,您可能希望在列上运行alter table语句,以确保它是您想要的数据类型。

答案 2 :(得分:1)

试试这个:

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL