Создание копии базовой таблицы
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
<Исходная таблица>
должна ссылаться на имя базой таблицы (представления запрещены). -
<Исходная таблица>
может ссылаться на глобальную временную таблицу. В этом случае<целевой таблицей>
может быть как глобальная временная таблица, так и базовая.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;
Общие правила
-
Конструкция
<определение копии таблицы>
используется для создания пустой<целевой таблицы>
на основе определения<исходной таблицы>
, включая все имена столбцов, их типы данных, их ненулевые ограничения и индексы, определенные в<исходной таблице>
.create or replace table t1 (i int); create or replace table t2 like t1; create or replace table "Тестер".t2 like t1;
-
Для создания таблицы пользователь должен иметь уровень прав RESOURCE или DBA.
-
Для создания копии таблицы на
<исходную таблицу>
требуется привилегия SELECT. -
В момент выполнения копии таблицы
<исходная таблица>
не должна быть заблокирована. -
При копировании таблицы файловые параметры
<исходной таблицы>
применяются для<целевой таблицы>
.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)
-
При копировании таблицы внешние ключи не копируются.
-
При копировании таблицы информация о генерируемых столбцах
<исходной таблицы>
сохраняется в<целевой таблице>
, поэтому в<целевой таблице>
<генерируемые значения>
формироваться будут.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