Topik ini menjelaskan cara membuat tabel.
Sintaksis
CREATE [ GLOBAL TEMPORARY ] TABLE nama_tabel (
{ nama_kolom tipe_data [ DEFAULT ekspresi_default ]
[ batasan_kolom [ ... ] ] batasan_tabel } [, ...]
)
[ ON COMMIT { PRESERVE ROWS DELETE ROWS } ]
[ TABLESPACE tablespace ]Dalam sintaksis sebelumnya, column_constraint dapat diatur ke salah satu dari batasan berikut: [ CONSTRAINT nama_batasan ]
{ NOT NULL
NULL
UNIQUE [ USING INDEX TABLESPACE tablespace ]
PRIMARY KEY [ USING INDEX TABLESPACE tablespace ]
CHECK (ekspresi)
REFERENCES reftable [ ( refcolumn ) ]
[ ON DELETE aksi ] }
[ DEFERRABLE NOT DEFERRABLE ] [ INITIALLY DEFERRED
INITIALLY IMMEDIATE ] dapat diatur ke salah satu dari batasan berikut: [ CONSTRAINT nama_batasan ]
{ UNIQUE ( nama_kolom [, ...] )
[ USING INDEX TABLESPACE tablespace ]
PRIMARY KEY ( nama_kolom [, ...] )
[ USING INDEX TABLESPACE tablespace ]
CHECK ( ekspresi )
FOREIGN KEY ( nama_kolom [, ...] )
REFERENCES reftable [ ( refcolumn [, ...] ) ]
[ ON DELETE aksi ] }
[ DEFERRABLE NOT DEFERRABLE ]
[ INITIALLY DEFERRED INITIALLY IMMEDIATE ] Parameter
| Parameter | Deskripsi |
| GLOBAL TEMPORARY | Ketika parameter ini ditentukan, tabel yang dihasilkan adalah tabel sementara. Tabel sementara secara otomatis dihapus setelah sesi saat ini berakhir. Anda juga dapat menghapus tabel sementara secara manual setelah menyelesaikan transaksi. Untuk informasi lebih lanjut, lihat deskripsi tentang parameter ON COMMIT dalam tabel ini. Catatan
|
| nama tabel | Nama tabel. Catatan Untuk merujuk tabel ini, Anda dapat menggunakan nama memenuhi skema. |
| nama kolom | Nama kolom yang ingin Anda buat di tabel. |
| tipe data | Tipe data kolom. Nilainya dapat berisi spesifikasi array. |
| DEFAULT ekspresi_default | Ekspresi yang digunakan untuk menghasilkan nilai default untuk kolom yang didefinisikan. Ekspresi ini ditentukan dalam klausa DEFAULT. Ekspresi ini tidak boleh berisi subquery atau referensi ke kolom lain dalam tabel. Tipe data ekspresi default ini harus sama dengan tipe data kolom. Ketika tidak ada nilai yang dimasukkan untuk kolom, ekspresi default ini digunakan untuk menghasilkan nilai. Jika Anda tidak menentukan ekspresi default, nilai yang digunakan adalah NULL. |
| CONSTRAINT nama_batasan | Nama batasan kolom atau tabel yang ingin Anda konfigurasikan. Parameter nama_batasan bersifat opsional. Jika Anda meninggalkan parameter ini kosong, sistem secara otomatis menghasilkan nama untuk batasan kolom atau tabel. |
| NOT NULL | Menentukan bahwa kolom tidak boleh berisi nilai NULL. |
| PRIMARY KEY - batasan kolom | Menentukan bahwa satu atau beberapa kolom harus berisi nilai yang secara unik mengidentifikasi setiap baris dalam tabel dan tidak boleh berisi nilai NULL. Batasan PRIMARY KEY adalah kombinasi dari batasan UNIQUE dan NOT NULL. Namun, jika kunci utama terdiri dari sekumpulan kolom, Anda harus memberikan metadata skema. Hal ini karena kunci utama menyiratkan bahwa tabel lain dapat bergantung pada kumpulan kolom ini sebagai pengenal unik untuk baris. Catatan
|
| PRIMARY KEY ( nama_kolom [, ...] ) - batasan tabel | |
| CHECK (ekspresi) | Ekspresi yang digunakan untuk menghasilkan hasil Boolean. Ekspresi ini ditentukan dalam klausa Operasi INSERT atau UPDATE hanya dapat berhasil ketika ekspresi ini mengevaluasi menjadi true atau unknown. Jika tidak, operasi gagal dan kesalahan dikembalikan. Jika Anda mendefinisikan batasan CHECK pada kolom, Anda dapat membatasi nilai yang dapat ditulis ke kolom tersebut. Jika Anda mendefinisikan batasan CHECK pada tabel, Anda dapat membatasi nilai yang dapat ditulis ke beberapa kolom dalam tabel. Catatan Ekspresi ini tidak boleh berisi subquery atau referensi ke variabel selain kolom baris saat ini. |
| REFERENCES reftable [ ( refcolumn ) ] [ ON DELETE aksi ] - batasan kolom | Klausa ini menentukan batasan kunci asing. Batasan kunci asing mengharuskan nilai-nilai dalam kolom tabel yang dibuat harus ada dalam kolom tabel yang dirujuk. Jika parameter Jika data dalam kolom yang dirujuk diubah, operasi perubahan yang sama dilakukan pada kolom tabel ini. Klausa ON DELETE menentukan tindakan yang akan dilakukan ketika baris yang dirujuk dalam tabel yang dirujuk dihapus. Tindakan referensial tidak dapat ditunda, meskipun batasan dapat ditunda. Klausa ON DELETE mendukung tindakan referensial berikut:
Catatan Jika nilai kolom yang dirujuk sering berubah, kami sarankan Anda menambahkan indeks ke kolom kunci asing. Dengan cara ini, tindakan referensial yang terkait dengan kolom kunci asing dapat dilakukan dengan cara yang efisien. |
| FOREIGN KEY ( kolom [, ...] ) REFERENCES reftable [ ( refcolumn [, ...] ) ] [ ON DELETE aksi ] - batasan tabel | |
| DEFERRABLE NOT | Menentukan apakah batasan dapat ditunda. Batasan yang tidak dapat ditunda diperiksa segera setelah setiap pernyataan dieksekusi. Anda dapat menggunakan pernyataan SET CONSTRAINTS untuk menunda pemeriksaan batasan yang dapat ditunda. Ketika Anda menunda pemeriksaan batasan, batasan tidak diperiksa sampai akhir transaksi.
|
| DEFERRABLE | |
| INITIALLY IMMEDIATE | Waktu ketika batasan yang dapat ditunda yang ditentukan diperiksa. Nilai INITIALLY IMMEDIATE menentukan bahwa batasan diperiksa setelah setiap pernyataan dieksekusi. INITIALLY IMMEDIATE adalah nilai default. Nilai INITIALLY DEFERRED menentukan bahwa batasan diperiksa setelah transaksi berakhir. Anda dapat mengeksekusi pernyataanSET CONSTRAINTS untuk mengubah waktu ketika batasan diperiksa. |
| INITIALLY DEFERRED | |
| ON COMMIT | Tindakan yang dilakukan pada tabel sementara di akhir blok transaksi. Nilai default: PRESERVE ROWS. Nilai valid:
|
Deskripsi
Pernyataan CREATE TABLE membuat tabel dalam basis data saat ini. Tabel awalnya kosong. Pengguna yang mengeksekusi pernyataan adalah pemilik tabel.
Jika Anda menentukan nama skema dalam pernyataan, tabel dibuat dalam skema tersebut. Jika tidak, tabel dibuat dalam skema saat ini. Sebagai contoh, jika Anda mengeksekusi pernyataan CREATE TABLE myschema.mytable, tabel mytable dibuat dalam skema myschema. Untuk tabel sementara, Anda tidak perlu menentukan skema karena tabel tersebut ada dalam skema khusus. Nama tabel harus unik dalam skema yang sama dan tidak boleh sama dengan nama objek lain seperti urutan, indeks, atau tampilan.
Pernyataan CREATE TABLE juga secara otomatis membuat tipe data komposit yang sesuai dengan baris tabel. Nama tabel tidak boleh sama dengan nama tipe data yang ada dalam skema yang sama.
Tabel dapat berisi hingga 1.600 kolom. Namun, jumlah kolom mungkin lebih sedikit dalam praktiknya karena batasan pada panjang tupel.
- Batasan kolom didefinisikan pada satu kolom.
- Batasan tabel didefinisikan pada beberapa kolom dalam tabel.
Contoh
Buat dua tabel: dept dan 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 batasan tabel UNIQUE untuk tabel dept. Anda dapat mendefinisikan batasan tabel UNIQUE untuk beberapa kolom dalam 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 batasan CHECK tingkat kolom:
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 batasan CHECK tingkat tabel:
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 batasan PRIMARY KEY tingkat tabel untuk tabel jobhist. Batasan PRIMARY KEY tingkat tabel dapat didefinisikan pada satu atau beberapa 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)
); Konfigurasikan konstanta literal sebagai nilai default untuk kolom job dan atur nilai default kolom 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 bernama 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;