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