2017-12-30 62 views
-3

이 mysql 코드를 찾았습니다. 오라클 SQL 개발자에게 과거의 alter table 명령을 사용하면 실행하려고 할 때 오류가 표시됩니다.
이 내 테이블 :
oracle - Alter 테이블이 작동하지 않습니다.

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 article 
    ADD PRIMARY KEY (code), 
    ADD KEY code (code), 
    ADD KEY code_2 (code); 

이 오류 메시지입니다 :

교감 디부 erreur -
ORA- 01735 : 옵션 ALTER TABLE이 아닌 valide
01735. 00000 - "ALTER TAB이 잘못되었습니다. LE 옵션 "
* 원인 :
* 작업 :

+2

왜 3 개의 키가 같은 열과 함께 ??? – scaisEdge

+0

@scaisEdge 마지막 줄 2 개를 제거하면이 문제가 해결됩니까 ?? –

+0

시도 .... 오류 메시지를 표시하지 않습니다 .. 너무 어렵습니다 .. – scaisEdge

답변

1

이러한 CREATE TABLE은 Oracle (최소한 11gR2)에서는 작동하지 않습니다. 따라서, 나는 그것을 약간 재배치했다 (차이점을보기 위해 열을 직접 비교하라). 기본 키 제약 조건은 인라인 (내가했던 것처럼), 열 목록의 끝 (두 번째 예) 또는 별도로 ALTER TABLE (세 번째 예)을 사용하여 만들 수 있습니다.

기본 키 열에 NOT NULL을 지정할 필요가 없습니다. 오라클은 자체적으로이를 시행 할 것입니다.

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> 
1

당신은 오라클과 MySQL의 구문을 사용하는 것으로 나타납니다. 내가 제안 :

기본 키로 선언 code
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 
) ; 

, 컬럼에 별도의 인덱스를 생성 할 이유가 없다.