Banyak atribut dan properti dari tabel dapat diubah. Kita fokus pada jenis perubahan ini:
- Tabel Perubahan. Nama tabel dapat diubah dan tabel dapat dipindahkan. Memindahkan tabel database tugas administrasi karena biasanya digunakan untuk memindahkan tabel antara tablespace yang berbeda.
- Menambah atau Mengganti Kolom. Sebuah kolom datatype, panjang, atau nama dapat diubah. Anda dapat mengubah kolom dari nullable untuk tidak nullable juga.
- Menghapus Kolom. Menghapus sebuah kolom dari tabel dapat menghapus keduanya atau salah satu dari kolom atau baris data dari yang ada.
- Membangun kembali Tables. Paket oraclet yang disertakan dalam Database Oracle 9i memungkinkan perubahan yang sebelumnya memerlukan banyak usaha. Perubahan seperti penataan kembali kolom-kolom dalam tabel, menambahkan kolom antara kolom yang ada, dan mengubah primary key dari tabel dapat dilakukan dengan paket ini.
Statement ALTER TABLE digunakan untuk :
· Menambahkan kolom baru
· Memodifikasi kolom yang sudah ada
· Mendefinisikan nilai default untuk kolom baru
· Menghapus kolom
a. Menambahkan Kolom
Ketika menambahkan kolom baru, Anda tidak dapat menentukan constrain NOT NULL jika tabel telah memiliki baris. Untuk menambahkan kolom NOT NULL, Anda perlu mengikuti tiga langkah:
- Memodifikasi tabel untuk menambahkan kolom.
- Update kolom dengan nilai-nilai untuk semua baris yang ada.
- Tambahkan NOT NULL kendala.
Anda dapat menambahkan NOT NULL default kendala dengan klausa, bahkan jika tabel memiliki baris. Berikut ini sebuah contoh:
ADD updated_by VARCHAR2 (30) NOT NULL;
ALTER TABLE orders
ADD updated_by VARCHAR2 (30) NOT NULL
*
ERROR at line 1:
ORA-01758: table must be empty to add mandatory
(NOT NULL) column
ALTER TABLE orders ADD updated_by VARCHAR2 (30)
DEFAULT ‘JOHN’ NOT NULL;
ALTER TABLE orders
Berikut adalah sintaks untuk menambahkan kolom baru ke tabel yang ada:
ALTER TABLE [<schema>.]<table_name> ADD <column_definitions>;
Ketika kolom baru yang ditambahkan, selalu di bagian bawah tabel. Untuk yang ada baris, kolom baru akan bernilai NULL. Mari kita menambahkan kolom baru, ORDER_DATE, ke tabel ORDERS.
ALTER TABLE orders ADD order_date DATE;
Jika Anda menambahkan lebih dari satu kolom, kolom harus definisi
terlampir dalam tanda kurung dan dipisahkan dengan koma. Jika Anda menentukan sebuah nilai default untuk kolom baru ditambahkan, semua baris dalam tabel akan memiliki nilai default yang diberikan secara otomatis. Contoh berikut menambahkan dua lebih kolom ke tabel ORDERS.
ALTER TABLE orders ADD (quantity NUMBER (13,3), update_dt DATE DEFAULT SYSDATE);
b. Mengubah Kolom
Sintaks untuk mengubah kolom yang sudah ada dalam tabel adalah sebagai berikut:
ALTER TABLE [<schema>.]<table_name>
MODIFY <column_name> <new_attributes>;
Jika Anda menghilangkan salah satu bagian dari definisi kolom (datatype, nilai default, atau kolom constraint), bagian-bagian yang dihilangkan tetap tidak berubah. Jika Anda mengubah lebih dari satu kolom pada satu waktu, melampirkan definisi kolom dalam tanda kurung. Misalnya, untuk memodifikasi meja ORDERS, meningkatkan STATUS kolom ke 15 dan mengurangi kolom QUANTITY untuk 10,3, lakukan ini:
status VARCHAR2 (15));
ALTER TABLE orders MODIFY (quantity NUMBER (10,3),
Anda dapat menambahkan atau menghapus constrain dalam kolom dan memodifikasi nilai DEFAULT untuk kolom. Nilai DEFAULT termasuk menggunakan klausa MODIFY hanya mempengaruhi baris baru disisipkan ke tabel; yang ada baris dengan nilai kolom NULL tidak terpengaruh. Untuk menghapus nilai default untuk kolom, mendefinisi ulang klausa DEFAULT dengan nilai NULL. Sebagai contoh, pernyataan berikut menghapus SYSDATE default nilai dari kolom UPDATE_DT tabel ORDERS.
ALTER TABLE orders
MODIFY update_dt DEFAULT NULL;
Ini adalah aturan untuk mengubah definisi kolom:
- Anda dapat meningkatkan panjang kolom karakter dan ketepatan dari kolom numerik. Jika meja Anda memiliki banyak baris, semakin panjang suatu kolom CHAR akan memerlukan banyak sumber daya.
- Anda dapat menurunkan VARCHAR2 panjang kolom dan mengurangi ketepatan atau meningkatkan skala kolom numerik, jika semua data pada kolom sesuai dengan panjang yang baru.
- Anda dapat menurunkan panjang kolom CHAR nonempty, jika parameter BLANK_TRIMMING disetel ke TRUE.
- Kolom harus nilai NULL untuk mengubah datatype. Jika Anda tidak mengurangi panjang, Anda dapat mengubah datatype dari char ke VARCHAR2 atau sebaliknya, bahkan jika kolom tidak kosong.
c. Menghapus Kolom
Anda dapat menghapus kolom yang tidak digunakan, atau Anda dapat menandai kolom yang tidak digunakan dan menghapusnya nanti. Berikut adalah sintaks untuk menghapus kolom:
ALTER TABLE [<schema>.]<table_name>
DROP {COLUMN <column_name> | (<column_names>)}
[CASCADE CONSTRAINTS]
Mengapus DROP COLUMN nama kolom tertentu dari tabel. Anda dapat memberikan lebih dari satu nama kolom yang dipisahkan oleh koma di dalam tanda kurung. Ini akan mengakibatkan indeks dan contarin pada kolom juga terhapus. Anda harus menentukan CASCADE CONSTRAINTS jika menghapus kolom bagian dari multicolumn constrain; constrain akan dihapus. Sintaks untuk menandai kolom seperti yang digunakan adalah sebagai berikut:
ALTER TABLE [<schema>.]<table_name> SET UNUSED {COLUMN <column_name> | (<column_names>)}
[CASCADE CONSTRAINTS]
Setelah kolom ditandai sebagai tidak digunakan, Anda tidak akan melihatnya sebagai bagian dari definisi tabel. Mari kita tandai UPDATE_DT PERINTAH kolom dalam tabel sebagai tidak terpakai:
ALTER TABLE orders SET UNUSED COLUMN update_dt;
DESCRIBE orders
Name Null? Type
——————- ——– ————————————–
ORDER_NUMBER NOT NULL NUMBER(8)
STATUS VARCHAR2(15)
ORDER_DATE DATE
QUANTITY NUMBER(10,3)
Berikut adalah sintaks untuk menjatuhkan kolom sudah ditandai sebagai tidak terpakai:
ALTER TABLE [<schema>.]<table_name>
DROP {UNUSED COLUMNS | COLUMNS CONTINUE}
Gunakan klausa COLUMNS CONTINUE untuk melanjutkan operasi DROP yang sebelumnya terganggu. Klausul DROP UNUSED COLUMNS yang tidak terpakai akan menghapus semua kolom yang ditandai sebagai tidak terpakai. Anda tidak dapat selektif menghapus nama kolom setelah menandai mereka sebagai tidak terpakai. Contoh berikut membersihkan UPDATE_DT data dari kolom dalam tabel ORDERS:
ALTER TABLE orders DROP UNUSED COLUMNS;
d. Rename Tabel
Pernyataan RENAME digunakan untuk mengganti nama tabel dan objek database lain, seperti views, private synonyms, atau sequences. Sintaks untuk pernyataan RENAME adalah sebagai berikut:
RENAME old_name TO new_name;
Di sini, new_name dan old_name adalah nama tabel, view, private synonym, atau sequence. Bila Anda mengubah nama tabel, Oracle transfer secara otomatis batasan integritas, indeks, dan grants di atas tabel sebelumnya ke tabel baru. Oracle membatalkan semua obkect yang bergantung pada tabel yang berganti nama, seperti views, synonyms, stored procedures, dan functions. Contoh berikut ORDERS mengganti nama tabel untuk PURCHASE_ORDERS:
RENAME orders TO purchase_orders;
DESCRIBE purchase_orders
Name Null? Type
—————— ——– ————————————————
ORDER_NUMBER NOT NULL NUMBER(8)
STATUS VARCHAR2(15)
ORDER_DATE DATE
QUANTITY NUMBER(10,3)
Anda juga dapat menggunakan klausul RENAME TO dari pernyataan ALTER TABLE untuk mengubah nama sebuah tabel. Dengan menggunakan teknik ini, Anda dapat memenuhi syarat nama tabel dengan skema. Anda harus menggunakan pernyataan ALTER TABLE untuk mengganti nama tabel yang dimiliki oleh user lain (dan Anda memerlukan hak istimewa ALTER atas tabel atau hak istimewa sistem ALTER ANY TABLE). Berikut ini sebuah contoh:
ALTER TABLE scott.purchase_orders RENAME TO orders;
e. Menghapus Tabel
Menghapus tabel sederhana. Sintaks adalah sebagai berikut :
DROP TABLE [schema.]table_name [CASCADE CONSTRAINTS]
Bila Anda menghapus tabel, data dan definisi dari tabel tersebut dihapus. Indeks, constraints, triggers, dan privileges atas tabel juga terhapus. Setelah Anda menghapus tabel, tindakan tidak dapat dibatalkan. Oracle tidak menghapus views, materialized views, atau program yang disimpan referensi tabel, tapi itu menandai mereka sebagai tidak valid. Anda harus menentukan klausul CASCADE CONSTRAINTS jika ada kendala integritas referensial mengacu pada kunci primer atau kunci unik tabel ini. Berikut adalah cara untuk drop tabel TEST yang dimiliki oleh user SCOTT:
DROP TABLE scott.test;
Sebuah metode untuk mengosongkan tabel semua baris adalah dengan menggunakan pernyataan TRUNCATE. Hal ini berbeda dari menghapus dan kembali membuat tabel, karena membatalkan TRUNCATE tidak tergantung objek atau menghapus indexes, trigger, atau integritas referensial kendala.