Oracle中关键字后面的Alter table

Oracle中关键字后面的Alter table,oracle,oracle11g,ddl,alter-table,Oracle,Oracle11g,Ddl,Alter Table,为什么我不能在Oracle中也使用mySql语法?上面的命令在MySql中工作。你能给我一个有效的等价物吗 我在问,在我提供的Oracle命令中是否有任何方法可以使用after子句?,因为SQL是一个关系代数。它一点也不关心表中的“where”列,只关心它们是否存在 要让它在Oracle中工作,只需去掉after子句。Oracle的alter table文档非常简单,但可以归结为: Error report: SQL Error: ORA-01735: invalid ALTER TABLE

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




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

,因为SQL是一个关系代数。它一点也不关心表中的“where”列,只关心它们是否存在

要让它在Oracle中工作,只需去掉
after
子句。Oracle的
alter table
文档非常简单,但可以归结为:

Error report:
SQL Error: ORA-01735: invalid ALTER TABLE option
01735. 00000 -  "invalid ALTER TABLE option"
alter table
命令没有
after
子句。

尝试以下操作:

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

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

但是如果由于某种原因,你只需要在你的表中间有一个新的列,就有一个工作。

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL
其中,
选择0作为col1
是新列,然后根据需要从原始表中指定其他列。将
选择0作为col1
按所需顺序放置在适当的位置


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

您是在询问正确的语法,还是在询问原因?“为什么我不能在Oracle中也使用mySql语法?”。据我所知。MySQL有一些非常特殊的SQL语法,与其他SQL语法不同。几乎所有数据库供应商的语法都接近SQL标准,但没有实现SQL标准。它们几乎完全不同。@cctan:我添加了edit2作为对您的question@Floradu88nice answerIt在MySql中工作,而不是在Oracle或SqlServer中工作;然而,我希望拥有这个特性,我希望能够使用该子句,而不必重新创建table@Floradu88,那么你需要和甲骨文谈谈,而不是我们。我与Larry的关系不是很密切:-)@Floradu88:不,不需要重新创建表。@Floradu88,您不会丢失数据,您可以创建一个新表,将旧数据传输到其中(例如,请参阅Ilion的答案)。您可能希望在停机期间执行此操作,但这是可行的。您还可以使用DBMS_重新定义包对列进行重新排序,而无需使其脱机。
ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL
CREATE TABLE tab1New AS SELECT 0 AS col1, col1 AS col2 FROM tab1;
DROP TABLE tab1 PURGE;
RENAME tan1New to tab1;