Reserved Word di database Oracle

Reserved word adalah kata yang sudah di reserved (dikapling) oleh database Oracle. Contoh reserved word adalah select, delete, update, session, uid, key, rowid, dll. Daftar reserved word ada di view V$RESERVED_WORDS.

SQL> select * from V$RESERVED_WORDS;

Semua kata yang tercakup dalam reserved word TIDAK bisa digunakan untuk memberi nama object database, nama kolom pada tabel, dll. Contoh object database adalah: tabel, index, view, synonym, database link, dll. Gunakan query berikut untuk melihat tipe-tipe object database:
SQL> select distinct OBJECT_TYPE from DBA_OBJECTS
order by OBJECT_TYPE;

Contoh masalah yang sering muncul berkaitan dengan reserved word ini adalah ketika kita migrasi database dari non Oracle (misal MySQL) ke database Oracle. Misalkan di MySQL kita punya tabel SESSION dengan kolom NO dan UID. Ketika kita migrasi ke Oracle, katakanlah kita membuat tabel dengan definisi yang sama:

SQL> CREATE TABLE SESSION (NO NUMBER(2),UID VARCHAR2(20));
CREATE TABLE SESSION (NO NUMBER(2),UID VARCHAR2(20))
*
ERROR at line 1:
ORA-00903: invalid table name

SESSION dibilang sebagai “invalid table name”. Setelah kita check di V$RESERVED_WORDS, ternyata kata SESSION termasuk dalam daftar reserved word. Demikian juga kata UID yang kita pakai untuk nama kolom tersebut, juga termasuk reserved word.

Lantas, apa solusinya? Mau tidak mau kita harus mengubah nama table dan nama column tersebut.
SQL> CREATE TABLE SESSION_NEW (NO NUMBER(2),
UID_NEW VARCHAR2(20));

Dengan mengubah nama tabel dan kolom tersebut, mau tidak mau kita harus mengedit script aplikasi kita. Wah… berat sekali ya, kalau aplikasi kita banyak dan complicated.

Kalau masih memaksa pengin memakai kata yang termasuk dalam reserved word tersebut, gunakan kutip dua (double quote) pada kata tersebut. Contoh
SQL> CREATE TABLE "SESSION" (NO NUMBER(2),
"UID" VARCHAR2(20));

Namun, kita masih harus tetep mengubah coding di aplikasi.

This entry was posted in SQL and PL/SQL and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *