2017-12-30 26 views
-3

Ich finde diesen mysql-Code und wenn ich es nach Oracle SQL Developer Vergangenheit der Befehl Tabelle zeigt mir einen Fehler, wenn ich versuchte, es auszuführen.
dies ist meine Tabelle:
Oracle - Alter Tabelle funktioniert nicht

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 
) ; 

und dies ist der Befehl alter table:

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

dies ist die Fehlermeldung:

Rapport d'erreur -
ORA- 01735: Option ALTER TABLE nicht valide
01735. 00000 - "ungültig ALTER TAB LE Option“
* Ursache:
* Aktion:

+2

Warum 3 Schlüssel mit der gleichen Spalte ????? – scaisEdge

+0

@scaisEdge wenn ich die 2 letzte Zeile entferne, löst dies das Problem? –

+0

versuchen Sie .... Sie zeigen nicht die Fehlermeldung .. so .. ist schwierig .. asnwer – scaisEdge

Antwort

1

Eine solche CREATE TABLE wird in Oracle nicht funktionieren (mindestens 11gR2). Daher habe ich es ein wenig neu arrangiert (bitte vergleichen Sie Spalte für Spalte selbst, um Unterschiede zu sehen). Primärschlüssel Einschränkung kann Inline (wie ich), am Ende der Spalten Liste (2. Beispiel) oder separat, mit der ALTER TABLE (3. Beispiel) erstellt werden.

Beachten Sie, dass Sie NOT NULL für Primärschlüsselspalte (n) nicht angeben müssen; Oracle wird es selbst durchsetzen.

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

Sie erscheinen MySQL-Syntax mit Oracle zu verwenden. Ich würde vorschlagen:

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 
) ; 

Mit code als Primärschlüssel deklariert, gibt es keinen Grund getrennte Indizes für die Spalte zu erstellen.

Verwandte Themen