2012-01-19 13 views
10
ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL AFTER column2; 

Dlaczego nie mogę używać składni mySql również w Oracle? Powyższe polecenie działa w MySql. Czy możesz podać mi odpowiednik, który działa?Zmień tabelę po słowie kluczowym w Oracle


Error report: 
SQL Error: ORA-01735: invalid ALTER TABLE option 
01735. 00000 - "invalid ALTER TABLE option" 

Pytam czy jest jakiś sposób, aby używać po klauzuli polecenia Oracle, że przewidziane?

+2

czy pytasz o składnię corrent, czy też pytasz dlaczego? – cctan

+3

"Dlaczego nie mogę używać składni mySql również w Oracle?". O ile mi wiadomo. MySQL ma bardzo specjalną składnię SQL, która różni je od reszty. Prawie wszyscy dostawcy baz danych mają składnię zbliżoną do standardu SQL, ale nie implementują standardu SQL. Są prawie wszystkie różne. –

+0

@cctan: Dodałem edycję 2 jako odpowiedź na twoje pytanie –

Odpowiedz

18

Ponieważ SQL jest algebrą relacyjną. Nie obchodzi go ani trochę, że kolumny "gdzie" znajdują się w tabeli, tyle tylko, że istnieją.

Aby uruchomić go w Oracle, po prostu pozbyć się klauzuli after. Dokumentacja Oracle dla alter table jest here ale sprowadza się do:

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

Jest nieafter klauzula na komendę alter table.

+0

Chcę móc użyć tej klauzuli, bez odtwarzania tabeli –

+7

@ Floradu88, wtedy musisz porozmawiać z Oracle, nie my. Nie jestem tak blisko Larry'ego :-) – paxdiablo

+0

Więc nie da się tego zrobić? –

1

Spróbuj tego:

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL 
12

Oracle nie obsługuje dodawania kolumn w środku tabeli, tylko dodając je do końca. Projekt bazy danych i funkcjonalność aplikacji nie powinny zależeć od kolejności kolumn w schemacie bazy danych. Zawsze możesz określić zamówienie w wyciągu select.

Jeśli jednak z jakiegoś powodu po prostu musisz mieć nową kolumnę pośrodku stołu, jest tam praca.

CREATE TABLE tab1New AS SELECT 0 AS col1, col1 AS col2 FROM tab1; 
DROP TABLE tab1 PURGE; 
RENAME tan1New to tab1; 

Jeżeli SELECT 0 AS col1 to nowa kolumna, a następnie określić, ile potrzeba innych kolumn z oryginalnej tabeli. Umieść SELECT 0 AS col1 w odpowiednim miejscu w żądanej kolejności.

Następnie możesz wykonać polecenie zmiany tabeli w kolumnie, aby upewnić się, że jest to pożądany typ danych.