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