Создание таблицы с загрузкой данных
Спецификация
См. спецификацию пункта «Создание таблицы».
Синтаксические правила
-
Конструкция
< загрузка таблицы >
должна быть последней в конструкции< создание базовой таблицы >
.CREATE or replace TABLE tst (personID int not NULL, make char(20) default '', model char(20)) maxrowid 4096 maxrow 1000 pctfill 70 as (select rowid, make, model from auto);
-
Количество столбцов и типы данных столбцов создаваемой таблицы должны быть согласованы с результатами
< подзапроса >
, например:create or replace table tab2 as (select make, to_date(to_char(year+1900), 'yyyy') from auto);
или
create or replace table tab3 as (select cast make as char(20) as c, to_date(to_char(year+1900), 'yyyy') as d from auto where make like 'F%');
Создание таблицы, содержащей столбцы из нескольких таблиц
create or replace table tab1 (col1 int, col2 char(10)); create or replace table tab2 (col1 int, col2 char(10)); select tab1.col1, tab2.col2 from tab1, tab2 where tab1.col1=tab2.col1; insert into tab1 values(100, '12345'); insert into tab1 values(200, '67890'); insert into tab2 values(300, 'abcde'); insert into tab2 values(200, 'fdegh'); create or replace table tab (a int, b char(10)) as (select tab1.col1, tab2.col2 from tab1, tab2 where tab1.col1 = tab2.col1); select * from tab; |200| fdegh|
Общие правила
-
Конструкция
< загрузка таблицы >
создает таблицу с указанными параметрами и загружает в неё данные, возвращаемые< подзапросом >
. Количество столбцов и типы данных столбцов создаваемой таблицы должны быть согласованы с результатами< подзапроса >
, например:create or replace table tab1 (c char(20), d date) as (select make, to_date(to_char(year+1900), 'yyyy') from auto);
или
create or replace table tab1 as (select cast make as char(20) as c, to_date(to_char(year+1900), 'yyyy') as d from auto);
-
Конструкция
< создание базовой таблицы >
с одновременной загрузкой в неё данных выполняется как одна транзакция, поэтому команда ROLLBACK отменяет создание таблицы вместе с загруженными в неё данными. -
Если в создаваемой таблице для столбца задано подставляемое
< значение из последовательности >
, то в нем необходимо указывать опцию default, т.к. по умолчанию действует опция always, которая заставляет генерировать значения столбца автоматически (а не загружать их из< подзапроса >
), например:create or replace table tst (name char(20), i int generated by default as identity (start with -100 increment by 1 maxvalue 0)) as (select make, rowid from auto limit 10);
-
Особенности конструкции
< загрузка таблицы >
при загрузке данных:-
атрибут AUTOROWID игнорируется (подставляется значение из
< подзапроса >
);create or replace table tst (name char(20), i int autorowid) as (select make, personid + 1000 from auto limit 10); select name, i from tst limit 2; |FORD |1001| |ALPINE |1002|
-
атрибут AUTOINC INITIAL должен допускать вставку значения из
< подзапроса >
, например:1) допустимый запрос (подставляемое значение 9 входит в диапазон от 1 до 9) create or replace table tst (name char(20), i int autoinc initial (1)) as (select make, 9 from auto limit 1); 2) недопустимый запрос (декларированные подставляемые значения начинаются с 10, а возвращаемые подзапросом значения начинаются с 1) create or replace table tst (name char(20), i int autoinc initial (10)) as (select make, personid from auto limit 1);
-
атрибут AUTOINC RANGE игнорируется (подставляется значение из
< подзапроса >
).create or replace table tst (name char(20), i int autoinc range (100:400, 500:1000)) as (select make, personid from auto limit 2); insert into tst (name) values ('1111'); select name, i from tst limit 2; |FORD | 1| |ALPINE | 2| |1111 |100|
-