Membuat tabel baru.
Sintaksis
CREATE [ GLOBAL TEMPORARY ] TABLE nama_tabel (
{ nama_kolom tipe_data [ DEFAULT ekspresi_default ]
[ kendala_kolom [ ... ] ] | kendala_tabel } [, ...]
)
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
[ TABLESPACE tablespace ]Parameter kendala_kolom menggunakan sintaksis berikut:
[ CONSTRAINT nama_kendala ]
{ NOT NULL |
NULL |
UNIQUE [ USING INDEX TABLESPACE tablespace ] |
PRIMARY KEY [ USING INDEX TABLESPACE tablespace ] |
CHECK (ekspresi) |
REFERENCES reftable [ ( kolomref ) ]
[ ON DELETE aksi ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED |
INITIALLY IMMEDIATE ]Parameter kendala_tabel menggunakan sintaksis berikut:
[ CONSTRAINT nama_kendala ]
{ UNIQUE ( nama_kolom [, ...] )
[ USING INDEX TABLESPACE tablespace ] |
PRIMARY KEY ( nama_kolom [, ...] )
[ USING INDEX TABLESPACE tablespace ] |
CHECK ( ekspresi ) |
FOREIGN KEY ( nama_kolom [, ...] )
REFERENCES reftable [ ( kolomref [, ...] ) ]
[ ON DELETE aksi ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]Deskripsi
Perintah BUAT TABEL membuat tabel kosong di basis data saat ini. Tabel tersebut dimiliki oleh pengguna yang menjalankan perintah.
Jika nama skema ditentukan, seperti dalam BUAT TABEL myschema.mytable ..., tabel akan dibuat di skema yang ditentukan. Jika tidak, tabel akan dibuat di skema saat ini. Tabel sementara berada di skema khusus, sehingga Anda tidak perlu menentukan nama skema ketika membuatnya. Nama tabel harus unik di antara semua tabel, urutan, indeks, atau tampilan lainnya di skema yang sama.
Perintah BUAT TABEL juga secara otomatis membuat tipe data komposit terkait dengan satu baris dalam tabel. Oleh karena itu, tabel tidak dapat memiliki nama yang sama dengan tipe data yang sudah ada di skema yang sama.
Tabel dapat memiliki hingga 1.600 kolom. Dalam praktiknya, batas efektif lebih rendah karena kendala panjang tupel.
Klausa kendala opsional menentukan kondisi yang harus dipenuhi oleh baris baru atau diperbarui agar operasi INSERT atau UPDATE berhasil. Kendala adalah objek SQL yang membantu mendefinisikan set nilai valid dalam tabel.
Kendala diklasifikasikan menjadi kendala tabel dan kendala kolom. Kendala kolom didefinisikan sebagai bagian dari definisi kolom, sedangkan kendala tabel tidak bergantung pada kolom tertentu dan dapat mencakup beberapa kolom. Setiap kendala kolom juga dapat ditulis sebagai kendala tabel. Jika kendala hanya memengaruhi satu kolom, penggunaan kendala kolom hanya untuk kemudahan notasi.
Parameter
| Parameter | Deskripsi |
| GLOBAL TEMPORARY | Menentukan pembuatan tabel sementara. Perbedaan antara tabel sementara dan tabel standar terletak pada manajemen data. Tabel sementara menyimpan hasil perantara dari transaksi dan sesi. Data di tabel sementara hanya terlihat bagi sesi tempat tabel dibuat. Data tersebut tidak terlihat bagi sesi lain meskipun sesi lain telah melakukan commit. Tidak ada operasi konkuren yang dilakukan pada tabel sementara karena tabel sementara diisolasi oleh sesi. Tabel sementara dibagi menjadi tabel sementara tingkat transaksi dan tabel sementara tingkat sesi. Untuk informasi lebih lanjut, lihat parameter ON COMMIT. |
| nama_tabel | Nama tabel yang ingin dibuat. Nama tersebut dapat spesifik-skema. |
| nama_kolom | Nama kolom yang ingin dibuat di tabel baru. |
| tipe_data | Tipe data kolom yang ingin dibuat. Spesifikasi array dapat disertakan. |
| DEFAULT ekspresi_default | Klausa DEFAULT memberikan nilai default ke kolom yang menampilkan definisi kolom. Nilai tersebut adalah ekspresi tanpa variabel. Subquery atau referensi silang ke kolom lain di tabel saat ini tidak diperbolehkan. Tipe data ekspresi default harus sama dengan tipe data kolom. Catatan Ekspresi default digunakan dalam operasi insert yang tidak menentukan nilai untuk kolom. Jika tidak ada nilai default yang ditentukan untuk kolom, nilai defaultnya adalah null. |
| TABLESPACE | Tablespace. Tablespace kustom tidak didukung. |
| CONSTRAINT nama_kendala | Nama opsional untuk kendala kolom atau kendala tabel. Jika parameter ini tidak ditentukan, sistem akan menghasilkan nama. |
| NOT NULL | Menentukan bahwa kolom tidak boleh berisi nilai null. |
| NULL | Menentukan bahwa kolom dapat berisi nilai null. Ini adalah nilai default. Klausa ini hanya kompatibel dengan database SQL non-standar. Kami menyarankan Anda untuk tidak menggunakan klausa ini di aplikasi baru. |
| UNIQUE - kendala kolom UNIQUE (nama_kolom [, ...] ) - kendala tabel | Kendala UNIQUE menentukan bahwa sekelompok satu atau lebih kolom berbeda dari tabel hanya dapat berisi nilai unik. Perilaku kendala tabel unik sama dengan kendala kolom kecuali untuk kemampuan tambahan untuk melibatkan beberapa kolom. Saat kendala unik dievaluasi, nilai null tidak dianggap sama. Setiap kendala tabel unik harus menamai sekumpulan kolom. Sekumpulan kolom ini berbeda dari sekumpulan kolom yang dinamai oleh kendala unik lain atau kendala kunci utama yang didefinisikan untuk tabel. Jika tidak, kendala yang sama terdaftar dua kali. |
| PRIMARY KEY - kendala kolom PRIMARY KEY ( nama_kolom [, ...] ) - kendala tabel | Kendala kunci utama menentukan bahwa satu atau lebih kolom tabel hanya dapat berisi nilai unik, tidak duplikat, dan tidak null. PRIMARY KEY adalah kombinasi dari UNIQUE dan NOT NULL. PRIMARY KEY mengidentifikasi sekumpulan kolom sebagai kunci utama dan memberikan metadata tentang desain skema. Kunci utama menyiratkan bahwa tabel lain dapat mengandalkan sekumpulan kolom ini sebagai pengenal unik untuk baris. Hanya satu kunci utama yang dapat ditentukan untuk tabel, baik sebagai kendala kolom maupun kendala tabel. Kendala kunci utama harus menamai sekumpulan kolom. Sekumpulan kolom ini harus berbeda dari sekumpulan kolom lain yang dinamai oleh kendala unik yang didefinisikan untuk tabel yang sama. |
| CHECK (ekspresi) | Klausa CHECK menentukan ekspresi untuk operasi INSERT atau UPDATE berhasil. Ekspresi ini menghasilkan hasil Boolean yang harus dipenuhi oleh baris baru atau diperbarui. Jika ekspresi dievaluasi sebagai TRUE atau tidak diketahui, operasi INSERT atau UPDATE berhasil. Jika baris dari operasi INSERT atau UPDATE menghasilkan hasil FALSE, terjadi kesalahan dan operasi INSERT atau UPDATE tidak mengubah basis data. Kendala CHECK yang ditentukan sebagai kendala kolom harus merujuk hanya pada nilai kolom. Ekspresi dalam kendala tabel dapat merujuk ke beberapa kolom. Ekspresi CHECK tidak dapat berisi subquery atau merujuk variabel selain kolom baris saat ini. |
| REFERENCES reftable [ ( kolomref ) ] [ ON DELETE aksi ] - kendala kolom FOREIGN KEY ( kolom [, ...] ) REFERENCES reftable [ ( kolomref [, ...] ) ] [ ON DELETE aksi ] - kendala tabel | Klausa ini menentukan kendala kunci asing. Sebuah kelompok satu atau lebih kolom di tabel baru hanya boleh berisi nilai yang cocok dengan nilai di kolom referensi dari baris di tabel referensi. Jika kolom referensi dihilangkan, kunci utama tabel referensi digunakan. Kolom referensi harus merupakan kolom kendala unik atau kunci utama di tabel referensi. Saat data di kolom referensi berubah, tindakan dilakukan pada data di kolom tabel ini. Klausa ON DELETE menentukan tindakan yang akan dilakukan saat baris referensi di tabel referensi dihapus. Tindakan referensi tidak dapat ditunda meskipun kendala dapat ditunda. Tindakan berikut adalah tindakan yang mungkin untuk setiap klausa:
Jika kolom referensi sering berubah, Anda dapat menambahkan indeks ke kolom kunci asing. Ini memfasilitasi tindakan referensi yang terkait dengan kolom kunci asing. |
| DEFERRABLE NOT DEFERRABLE | Parameter ini mengontrol apakah kendala dapat ditunda. Kendala yang tidak dapat ditunda segera diperiksa setelah setiap perintah. Anda dapat menjalankan perintah SET CONSTRAINTS untuk menunda pemeriksaan kendala yang dapat ditunda hingga akhir transaksi. NOT DEFERRABLE adalah nilai default. Hanya kendala kunci asing yang menerima klausa ini. Semua jenis kendala lainnya tidak dapat ditunda. |
| INITIALLY IMMEDIATE INITIALLY DEFERRED | Jika kendala dapat ditunda, klausa ini menentukan waktu default untuk memeriksa kendala. Jika kendala adalah INITIALLY IMMEDIATE, ia diperiksa setelah setiap pernyataan. Ini adalah nilai default. Jika kendala adalah INITIALLY DEFERRED, ia hanya diperiksa pada akhir transaksi. Anda dapat menjalankan perintah SET CONSTRAINTS untuk mengubah waktu pemeriksaan kendala. |
| ON COMMIT | Anda dapat menggunakan klausa ON COMMIT untuk mengontrol perilaku tabel sementara di akhir blok transaksi. Opsi berikut tersedia:
|
Contoh
Buat tabel dept dan tabel emp.
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);Definisikan kendala tabel unik untuk tabel dept. Anda dapat mendefinisikan kendala tabel unik pada satu atau lebih kolom tabel.
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE,
loc VARCHAR2(13)
);Definisikan kendala kolom CHECK.
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);Definisikan kendala tabel CHECK.
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno),
CONSTRAINT new_emp_ck CHECK (ename IS NOT NULL AND empno > 7000)
);Definisikan kendala tabel kunci utama untuk tabel jobhist. Anda dapat mendefinisikan kendala tabel kunci utama pada satu atau lebih kolom tabel.
CREATE TABLE jobhist (
empno NUMBER(4) NOT NULL,
startdate DATE NOT NULL,
enddate DATE,
job VARCHAR2(9),
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
chgdesc VARCHAR2(80),
CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate)
);Tetapkan nilai konstan literal default ke kolom job dan atur nilai default hiredate ke tanggal saat baris dimasukkan.
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9) DEFAULT 'SALESMAN',
mgr NUMBER(4),
hiredate DATE DEFAULT SYSDATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);Buat tabel dept di tablespace diskvol1.
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
) TABLESPACE diskvol1;