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

Tại sao tôi không thể sử dụng cú pháp mySql trong Oracle? Lệnh trên hoạt động trong MySql. Bạn có thể cho tôi một tương đương có hiệu quả không?Thay đổi bảng sau từ khóa trong Oracle


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

Tôi yêu cầu nếu có cách nào để sử dụng sau khi điều khoản trong lệnh Oracle mà tôi cung cấp?

+2

bạn có yêu cầu cú pháp sửa đổi hoặc bạn đang hỏi về lý do không? – cctan

+3

"Tại sao tôi không thể sử dụng cú pháp mySql trong Oracle?". Theo như tôi biết. MySQL có một số cú pháp SQL rất đặc biệt khác với cú pháp còn lại. Hầu như tất cả các nhà cung cấp cơ sở dữ liệu đều có cú pháp gần với chuẩn SQL nhưng không triển khai chuẩn SQL. Chúng khá khác nhau. –

+0

@cctan: Tôi đã thêm chỉnh sửa 2 làm câu trả lời cho câu hỏi của bạn –

Trả lời

18

Vì SQL là một đại số quan hệ. Nó không quan tâm một chút về "nơi" cột được đặt trong một bảng, chỉ rằng chúng tồn tại.

Để làm cho nó hoạt động trong Oracle, chỉ cần loại bỏ mệnh đề after. Các tài liệu Oracle cho alter tablehere nhưng nó nắm tới:

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

khôngafter khoản cho lệnh alter table.

+0

Tôi muốn có thể sử dụng mệnh đề đó, mà không cần tạo lại bảng –

+7

@ Floradu88, sau đó bạn cần nói chuyện với Oracle, không phải chúng tôi. Tôi không gần Larry :-) – paxdiablo

+0

Vì vậy, nó không thể được thực hiện? –

1

Hãy thử điều này:

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

Oracle không hỗ trợ thêm các cột ở giữa của một bảng, chỉ bổ sung chúng đến cùng. Thiết kế cơ sở dữ liệu và chức năng ứng dụng của bạn không nên phụ thuộc vào thứ tự các cột trong lược đồ cơ sở dữ liệu. Bạn luôn có thể chỉ định một đơn đặt hàng trong câu lệnh chọn của bạn, sau khi tất cả.

Tuy nhiên, vì một số lý do bạn chỉ cần có một cột mới ở giữa bảng của bạn có một công việc xung quanh.

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

Trường hợp SELECT 0 AS col1 là cột mới của bạn và sau đó bạn chỉ định các cột khác nếu cần từ bảng gốc. Đặt số SELECT 0 AS col1 vào vị trí thích hợp theo thứ tự bạn muốn.

Sau đó, bạn có thể chạy câu lệnh bảng thay đổi trên cột để đảm bảo đó là loại dữ liệu bạn muốn.