در Oracle Database، برخلاف برخی دیگر از دیتابیسها مانند MySQL، امکان تغییر ترتیب ستونها با دستور مستقیم ALTER TABLE
وجود ندارد. اما از نسخه 12c به بعد، ویژگی جالبی به نام INVISIBLE COLUMNS
معرفی شده که با استفاده از آن میتوان ترتیب نمایش ستونها را به صورت غیرمستقیم تغییر داد — بدون نیاز به بازسازی کامل جدول.
در این سناریو، یک جدول ساده به نام test_move_column
ایجاد میکنیم و مراحل جابجایی ستونها را با استفاده از تکنیک INVISIBLE
انجام میدهیم.
ساخت جدول اولیه:
CREATE TABLE test_move_column (
id NUMBER,
birthday DATE,
name VARCHAR2(200)
);
اضافه کردن ستون جدید:
ALTER TABLE test_move_column ADD phone NUMBER;
در این حالت ، ترتیب ستونها به شکل زیر است:
vahid@orclpdb(56)> desc test_move_column
Name Null? Type
----------------- -------- ---------------
ID NUMBER
BIRTHDAY DATE
NAME VARCHAR2(200)
PHONE NUMBER
حذف ستون phone. میخواهیم phone بین birthday و name قرار بگیرد.
ALTER TABLE test_move_column DROP COLUMN phone;
نامرئی کردن ستون NAME:
ALTER TABLE test_move_column MODIFY name INVISIBLE;
دقت کنید که این کار باعث میشود ستون NAME
در خروجی SELECT *
ظاهر نشود.
افزودن مجدد ستون phone:
ALTER TABLE test_move_column ADD phone NUMBER;
اکنون ستون phone
بعد از birthday
و قبل از name
اضافه میشود.
مرئی کردن دوباره ستون name:
ALTER TABLE test_move_column MODIFY name VISIBLE;
ترتیب نهایی ستونها در DESC
به شکل زیر است:
vahid@orclpdb(56)> desc test_move_column
Name Null? Type
------------ -------- ----------------------------------------------------------------------------
ID NUMBER
BIRTHDAY DATE
PHONE NUMBER
NAME VARCHAR2(200)
بدون حذف جدول و ساخت مجدد، ترتیب ظاهری ستونها تغییر کرده است.