Создание копии базовой таблицы
Спецификация

См. спецификацию пункта «Создание таблицы».

Синтаксические правила
  1. <Исходная таблица> должна ссылаться на имя базой таблицы (представления запрещены).

  2. <Исходная таблица> может ссылаться на глобальную временную таблицу. В этом случае <целевой таблицей> может быть как глобальная временная таблица, так и базовая.

    create or replace global temporary table glb_tmp (id int primary key,name char(10),id_ref1 int on commit delete rows);
    create or replace global temporary table glb_tmp_copy like glb_tmp;
    create or replace table glb_tmp_copy like glb_tmp;
Общие правила
  1. Конструкция <определение копии таблицы> используется для создания пустой <целевой таблицы> на основе определения <исходной таблицы>, включая все имена столбцов, их типы данных, их ненулевые ограничения и индексы, определенные в <исходной таблице>.

    create or replace table t1 (i int);
    create or replace table t2 like t1;
    create or replace table "Тестер".t2 like t1;
  2. Для создания таблицы пользователь должен иметь уровень прав RESOURCE или DBA.

  3. Для создания копии таблицы на <исходную таблицу> требуется привилегия SELECT.

  4. В момент выполнения копии таблицы <исходная таблица> не должна быть заблокирована.

  5. При копировании таблицы файловые параметры <исходной таблицы> применяются для <целевой таблицы>.

    create or replace table tst1(i int, j int) datafiles 2 ('SY00' 10, 'SY00' 11) indexfiles 3 ('SY00' 10, 'SY00' 11, 'SY00' 25);
    create or replace table tst2 like tst1;
    inl> show tst1
    …
    * Файлов индексов            : 3 ("SY00" 10,"SY00" 11,"SY00" 25)
    * Файлов данных              : 2 ("SY00" 10,"SY00" 11)
    
    inl>show tst2
    * Файлов индексов            : 3 ("SY00" 10,"SY00" 11,"SY00" 25)
    * Файлов данных              : 2 ("SY00" 10,"SY00" 11)
  6. При копировании таблицы внешние ключи не копируются.

  7. При копировании таблицы информация о генерируемых столбцах <исходной таблицы> сохраняется в <целевой таблице>, поэтому в <целевой таблице> <генерируемые значения> формироваться будут.

    create or replace table tst1(i int, j int, k int generated as (i+j));
    create or replace table tst2 like tst1;
    inl>show tst1
    …
    K                  INTEGER GENERATED ALWAYS AS (("I"="J"))
    inl>show tst2
    …
    K                  INTEGER GENERATED ALWAYS AS (("I"="J"))
    insert into tst2(i,j) values(1,2);
    insert into tst2(i,j) values(3,4);
    select * from tst2;
    I J K
    1 2 3
    3 4 7