在Oracle中更改关键字后的表

rad*_*scu 11 oracle ddl alter-table oracle11g

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL AFTER column2;
Run Code Online (Sandbox Code Playgroud)

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


Error report:
SQL Error: ORA-01735: invalid ALTER TABLE option
01735. 00000 -  "invalid ALTER TABLE option"
Run Code Online (Sandbox Code Playgroud)

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

pax*_*blo 18

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

要让它在Oracle中工作,只需删除该after子句.Oracle文档alter table在这里,但它归结为:

alter table testTable
    add ( column1 number(1) default 0 not null )
Run Code Online (Sandbox Code Playgroud)

没有 after在子句alter table命令.

  • @ Floradu88,然后你需要和Oracle交谈,而不是我们.我不是那么接近拉里:-) (8认同)

Ili*_*ion 12

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

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

CREATE TABLE tab1New AS SELECT 0 AS col1, col1 AS col2 FROM tab1;
DROP TABLE tab1 PURGE;
RENAME tan1New to tab1;
Run Code Online (Sandbox Code Playgroud)

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

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