تغییر ترتیب ستون‌ها در Oracle Database با استفاده از ویژگی INVISIBLE

در 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)

بدون حذف جدول و ساخت مجدد، ترتیب ظاهری ستون‌ها تغییر کرده است.