oracle - Alter表不起作用

时间:2017-12-30 15:20:32

标签: sql oracle

我找到了这个mysql代码,当我将它传递给oracle sql developer时,alter table命令在我试图执行它时显示错误。
这是我的表:

CREATE TABLE article (
  code varchar(20) NOT NULL,
  designation varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  num_serie int(50) NOT NULL,
  num_reference int(50) NOT NULL,
  num_inventaire int(50) NOT NULL,
  tva double NOT NULL,
  famille varchar(50) NOT NULL,
  sous_famille varchar(50) NOT NULL
) ;

这是alter table命令:

ALTER TABLE article
  ADD PRIMARY KEY (code),
  ADD KEY code (code),
  ADD KEY code_2 (code);

这是错误消息:

  

Rapport d'erreur -
ORA-01735:选项ALTER TABLE non   的Valide
  01735. 00000 - “ALTER TABLE选项无效”
  *原因:
  *操作:

2 个答案:

答案 0 :(得分:1)

您似乎在Oracle中使用MySQL语法。我建议:

CREATE TABLE articles (
  code varchar2(20) NOT NULL PRIMARY KEY,
  designation nvarchar2(100) NOT NULL,
  num_serie number NOT NULL,
  num_reference number NOT NULL,
  num_inventaire number NOT NULL,
  tva number NOT NULL,
  famille varchar2(50) NOT NULL,
  sous_famille varchar2(50) NOT NULL
) ;

code声明为主键,没有理由在列上创建单独的索引。

答案 1 :(得分:1)

这样的CREATE TABLE在Oracle中不起作用(至少11gR2)。因此,我稍微重新安排了一下(请自己逐列比较,看看差异)。可以在列的末尾创建主键约束 inline (正如我所做的那样)。列表(第2个例子)或单独使用ALTER TABLE(第3个例子)。

请注意,您不必为主键列指定NOT NULL; Oracle将自行执行它。

SQL> CREATE TABLE article (
  2    code           varchar2(20) constraint pk_art primary key,
  3    designation    varchar2(100) NOT NULL,
  4    num_serie      int NOT NULL,
  5    num_reference  int NOT NULL,
  6    num_inventaire int NOT NULL,
  7    tva            number NOT NULL,
  8    famille        varchar2(50) NOT NULL,
  9    sous_famille   varchar2(50) NOT NULL
 10  );

Table created.

SQL> drop table article;

Table dropped.

SQL> CREATE TABLE article (
  2    code           varchar2(20),
  3    designation    varchar2(100) NOT NULL,
  4    num_serie      int NOT NULL,
  5    num_reference  int NOT NULL,
  6    num_inventaire int NOT NULL,
  7    tva            number NOT NULL,
  8    famille        varchar2(50) NOT NULL,
  9    sous_famille   varchar2(50) NOT NULL,
 10    --
 11    constraint pk_art primary key (code)
 12  );

Table created.

SQL> drop table article;

Table dropped.

SQL> CREATE TABLE article (
  2    code           varchar2(20),
  3    designation    varchar2(100) NOT NULL,
  4    num_serie      int NOT NULL,
  5    num_reference  int NOT NULL,
  6    num_inventaire int NOT NULL,
  7    tva            number NOT NULL,
  8    famille        varchar2(50) NOT NULL,
  9    sous_famille   varchar2(50) NOT NULL
 10  );

Table created.

SQL> alter table article add constraint pk_art primary key (code);

Table altered.

SQL>