Создание копии базовой таблицы
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
< Исходная таблица >
должна ссылаться на имя базой таблицы (представления запрещены). -
< Исходная таблица >
может ссылаться на глобальную временную таблицу. В этом случае< целевой таблицей >
может быть как глобальная временная таблица, так и базовая.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