Как скопировать данные из TableA в TableB с новыми разделами? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть TableA, которая имеет сотни тысяч строк и все еще увеличивается в размере.Без перегородок скорость заметно снизилась.

Итак, я создал новую таблицу под названием TableB, в которой столбцы были похожи (как на имя, так и на тип) на TableA в Oracle SQL Developer.(TableA и TableB находятся в одной базе данных, но не в одной и той же таблице). Я дополнительно создал разделы для TableB.

Теперь все, что я хочу сделать, - это скопировать все данные из TableA из TableB, чтобы проверить скоростизапросов.

Чтобы проверить скорости таблиц с разделами, я решил скопировать все данные теперь, когда в TableB есть все те же столбцы, что и A.

insert into TableB ( select * from TableA);

То, что я ожидализ приведенного выше утверждения были данные, которые нужно скопировать, но вместо этого я получил ошибку:

Ошибка, начинающаяся со строки: 1 в команде - вставка в таблицу B (выберите * из таблицы A) Ошибка в командной строке: 1 столбец: 1 Отчет об ошибке - Ошибка SQL: ORA-54013: Операция INSERT запрещена для виртуальных столбцов 54013. 0000 - «Операция INSERT запрещена для виртуальных столбцов» * Причина: Попытка вставить значения в виртуальный столбец * Действие: Повторно выполнить проверку безпредоставляя значения для виртуального столбца

Я посмотрел Виртуальные столбцы, и кажется, что это

"При запросе,виртуальные столбцы выглядят как обычные столбцы таблицы, но их значения выводятся, а не хранятся на диске.Синтаксис для определения виртуального столбца приведен ниже. "

Однако у меня нет никаких данных в TableB вообще. В TableB есть только столбцы, которые соответствуют TableA, поэтому я не уверен относительно того, как мои столбцы могут быть полученыкогда нечего выводить?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

вы создали таблицу B также с производными столбцами?Исходя из вашего вопроса, я предполагаю, что вы создали таблицу B также с виртуальными столбцами.

Одна вещь, которую вы должны заметить, так как у вас есть большой объем записей для вставки, используйте массовый режим для более быстрой работы .. используйте подсказку добавления какпоказано ниже.Обратите внимание - вам не нужно включать виртуальные столбцы в приведенную ниже инструкцию, так как они будут рассчитаны на лету.

insert  /*+ APPEND */   into tableB (column1, column2,...columnn) select column1, column2,...columnn from TableA
0 голосов
/ 11 февраля 2019

Вы можете использовать запрос

SELECT column_name, virtual_column
  FROM user_tab_cols
 WHERE table_name = 'TABLEA';

COLUMN_NAME VIRTUAL_COLUMN
----------- --------------
ID          NO
COL1        NO
COL2        NO
COL3        YES

Затем используйте

INSERT INTO TABLEB(ID,COL1,COL2) SELECT ID,COL1,COL2 FROM TABLEA;

, чтобы освободить его от виртуальных столбцов, те, которые рассчитываются из других столбцов'значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...