Создание таблицы с загрузкой данных
Спецификация

См. спецификацию пункта «Создание таблицы».

Синтаксические правила
  1. Конструкция < загрузка таблицы > должна быть последней в конструкции < создание базовой таблицы >.

    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);
  2. Количество столбцов и типы данных столбцов создаваемой таблицы должны быть согласованы с результатами < подзапроса >, например:

    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|
Общие правила
  1. Конструкция < загрузка таблицы > создает таблицу с указанными параметрами и загружает в неё данные, возвращаемые < подзапросом >. Количество столбцов и типы данных столбцов создаваемой таблицы должны быть согласованы с результатами < подзапроса >, например:

    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);
  2. Конструкция < создание базовой таблицы > с одновременной загрузкой в неё данных выполняется как одна транзакция, поэтому команда ROLLBACK отменяет создание таблицы вместе с загруженными в неё данными.

  3. Если в создаваемой таблице для столбца задано подставляемое < значение из последовательности >, то в нем необходимо указывать опцию 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);
  4. Особенности конструкции < загрузка таблицы > при загрузке данных:

    • атрибут 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|