Копировать данные из одной таблицы в другой оракул

Обновлено: 02.07.2024

В этом руководстве по Oracle объясняется, как использовать оператор Oracle CREATE TABLE AS с синтаксисом и примерами.

Описание

Вы также можете использовать оператор Oracle CREATE TABLE AS для создания таблицы из существующей таблицы путем копирования столбцов существующей таблицы.

Важно отметить, что при создании таблицы таким образом новая таблица будет заполнена записями из существующей таблицы (на основе оператора SELECT).

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

Синтаксис

Синтаксис оператора CREATE TABLE AS, копирующего все столбцы в Oracle/PLSQL, следующий:

Пример

Давайте рассмотрим пример CREATE TABLE AS, в котором показано, как создать таблицу путем копирования всех столбцов из другой таблицы.

В этом примере создается новая таблица с именем suppliers, которая включает все столбцы из таблицы companies.

Если в таблице companies есть записи, новая таблица suppliers будет заполнена записями, возвращенными оператором SELECT.

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

Синтаксис

Синтаксис оператора CREATE TABLE AS, копирующего выбранные столбцы в Oracle/PLSQL, следующий:

Пример

Давайте рассмотрим пример CREATE TABLE AS, в котором показано, как создать таблицу путем копирования выбранных столбцов из другой таблицы.

В этом примере будет создана новая таблица с именем suppliers, но новая таблица будет включать только указанные столбцы (например, company_id, адрес, город, штат и почтовый индекс) из компаний. таблица.

Опять же, если в таблице companies есть записи, новая таблица suppliers будет заполнена записями, возвращенными оператором SELECT.

Создать таблицу — путем копирования выбранных столбцов из нескольких таблиц

Синтаксис

Синтаксис оператора CREATE TABLE AS, копирующего столбцы из нескольких таблиц в Oracle/PLSQL, следующий:

Пример

Давайте рассмотрим пример CREATE TABLE AS, в котором показано, как создать таблицу путем копирования выбранных столбцов из нескольких таблиц.

В этом примере создается новая таблица с именем suppliers на основе определений столбцов из обеих таблиц companies и categories (например: company_id, адрес и категория_тип).

Часто задаваемые вопросы

Вопрос. Как создать таблицу Oracle из другой таблицы, не копируя значения из старой таблицы?

Ответ: Для этого используется синтаксис Oracle CREATE TABLE:

Это создаст новую таблицу с именем suppliers, которая будет включать все определения столбцов из таблицы companies, но не данные из таблицы companies.

Благодарности. Мы хотели бы поблагодарить Daniel W. за предоставление этого решения!

Прочитайте эту главу, сидя за компьютером, и попробуйте показанный пример. Прежде чем начать, убедитесь, что у вас есть доступ к примерам таблиц, описанным в SQL*Plus Quick Start.

Команда COPY будет устаревшей в будущих выпусках SQL*Plus. Никакие новые типы данных не будут поддерживаться COPY.

Синтаксис команды COPY

где база данных имеет следующий синтаксис:

имя пользователя [/ пароль ]@connect_identifier

Копирует данные из запроса в таблицу в той же или другой базе данных. COPY поддерживает следующие типы данных:

СИМВОЛ ДАТЫ ДЛИННЫЙ НОМЕР VARCHAR2

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

Условия

Описание каждого термина или пункта см. в следующем списке:

База данных, содержащая копируемые данные. Если вы опустите предложение FROM, источником по умолчанию будет база данных, к которой подключен SQL*Plus (то есть база данных, к которой обращаются другие команды). Вы должны использовать предложение FROM, чтобы указать исходную базу данных, отличную от базы данных по умолчанию. Предложение команды COPY FROM не поддерживает привилегированные соединения SYSDBA или SYSOPER.

База данных, содержащая целевую таблицу. Если вы опускаете предложение TO, по умолчанию в качестве места назначения используется база данных, к которой подключен SQL*Plus (то есть база данных, к которой обращаются другие команды). Вы должны использовать предложение TO, чтобы указать целевую базу данных, отличную от базы данных по умолчанию. Предложение TO команды COPY не поддерживает привилегированные соединения SYSDBA или SYSOPER.

Указывает имя пользователя [/ пароль ] @ connect_identifier исходной или целевой базы данных Oracle, которую вы хотите КОПИРОВАТЬ ИЗ или КОПИРОВАТЬ В. Команда COPY не поддерживает привилегированные соединения SYSDBA или SYSOPER. Вы должны указать имя пользователя. SQL*Plus запрашивает пароль, связанный с именем пользователя, указанным в предложениях COPY FROM или COPY TO. SQL*Plus подавляет отображение ответа на ваш пароль.

Вы должны включить предложение connect_identifier, чтобы указать исходную или целевую базу данных. Точный синтаксис зависит от конфигурации Oracle Net. Для получения дополнительной информации обратитесь к руководству по Oracle Net или обратитесь к своему администратору баз данных.

Вставляет строки из запроса в target_table, если таблица существует. Если целевая_таблица не существует, COPY создает ее.

Вставляет строки из запроса в целевую_таблицу после первого создания таблицы. Если target_table уже существует, COPY возвращает ошибку.

Вставляет строки из запроса в target_table . Если target_table не существует, COPY возвращает ошибку. При использовании INSERT запрос USING должен выбирать по одному столбцу для каждого столбца в таблице_назначения.

Заменяет целевую_таблицу и ее содержимое строками из запроса. Если целевая_таблица не существует, COPY создает ее. В противном случае COPY удаляет существующую таблицу и заменяет ее таблицей, содержащей скопированные данные.

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

( столбец , столбец , столбец , . )

Указывает имена столбцов в таблице_назначения. Вы должны заключить имя в двойные кавычки, если оно содержит строчные буквы или пробелы.

Если вы указываете столбцы, количество столбцов должно равняться количеству столбцов, выбранных запросом. Если вы не укажете какие-либо столбцы, скопированные столбцы будут иметь те же имена в целевой таблице, что и в исходной, если COPY создаст целевую_таблицу .

Указывает SQL-запрос (команда SELECT), определяющий, какие строки и столбцы копируются COPY.

Использование

Чтобы включить копирование данных между базами данных Oracle и другими базами данных, столбцы NUMBER заменяются столбцами DECIMAL в таблице назначения. Следовательно, если вы копируете между базами данных Oracle, столбец NUMBER без точности будет заменен столбцом DECIMAL(38). При копировании между базами данных Oracle вы должны использовать команды SQL (CREATE TABLE AS и INSERT) или убедиться, что ваши столбцы имеют указанную точность.

Переменная SQL*Plus SET LONG ограничивает длину копируемых столбцов LONG. Если какие-либо столбцы LONG содержат данные длиннее, чем значение LONG, COPY усекает данные.

SQL*Plus выполняет фиксацию в конце каждой успешной операции COPY. Если для переменной SQL*Plus SET COPYCOMMIT установлено положительное значение n, SQL*Plus выполняет фиксацию после копирования каждых n пакетов записей. Переменная SQL*Plus SET ARRAYSIZE определяет размер пакета.

Некоторые операционные среды требуют, чтобы имена служб заключались в двойные кавычки.

Примеры

Следующая команда копирует всю таблицу EMPLOYEES в таблицу с именем WESTEMPLOYEES. Обратите внимание, что таблицы расположены в двух разных базах данных. Если WESTEMPLOYEES уже существует, SQL*Plus заменяет таблицу и ее содержимое. Столбцы в WESTEMPLOYEES имеют те же имена, что и столбцы в исходной таблице EMPLOYEES.

Следующая команда копирует выбранные записи из EMPLOYEES в базу данных, к которой подключен SQL*Plus. SQL*Plus создает ПРОДАВЦОВ через копию. SQL*Plus копирует только столбцы EMPLOYEE_ID и LAST_NAME, а в месте назначения называет их EMPLOYEE_ID и SA_MAN.

Копирование данных из одной базы данных в другую

Используйте команду SQL*Plus COPY для копирования данных CHAR, DATE, LONG, NUMBER или VARCHAR2 между базами данных и между таблицами в одной базе данных. С помощью команды COPY вы можете копировать данные между базами данных следующими способами:

Скопируйте данные из удаленной базы данных в локальную базу данных.

Скопируйте данные из вашей локальной базы данных (по умолчанию) в удаленную базу данных (большинство систем).

Копировать данные из одной удаленной базы данных в другую удаленную базу данных (большинство систем).

В целом, команда COPY предназначена для копирования данных между базами данных Oracle и другими базами данных. Вы должны использовать команды SQL (CREATE TABLE AS и INSERT) для копирования данных между базами данных Oracle.

Понимание синтаксиса команды COPY

Вы вводите команду COPY в следующей форме:

Вот пример команды COPY:

Чтобы указать базу данных в предложении FROM или TO, необходимо иметь действительное имя пользователя и пароль для локальной и удаленной баз данных и знать соответствующие имена служб Oracle Net. COPY подчиняется требованиям безопасности Oracle Database, поэтому указанному вами имени пользователя должен быть предоставлен доступ к таблицам, чтобы у вас был доступ к таблицам. Чтобы узнать, какие базы данных вам доступны, обратитесь к своему администратору базы данных.

При копировании в локальную базу данных из удаленной базы данных можно опустить предложение TO. Когда вы копируете в удаленную базу данных из вашей локальной базы данных, вы можете опустить предложение FROM. При копировании между удаленными базами данных необходимо включать оба предложения. Однако включение обоих пунктов повышает читабельность ваших сценариев.

Команда COPY ведет себя по-разному в зависимости от того, существует ли уже целевая таблица, и от введенного вами условия действия (CREATE в примере). Дополнительную информацию см. в разделе Управление обработкой таблицы назначения.

По умолчанию скопированные столбцы имеют те же имена в таблице назначения, что и в исходной таблице. Если вы хотите дать новые имена столбцам в целевой таблице, введите новые имена в круглых скобках после имени целевой таблицы. Если вы вводите какие-либо имена столбцов, вы должны ввести имя для каждого копируемого столбца.

Чтобы включить копирование данных между базами данных Oracle и другими базами данных, столбцы NUMBER заменяются столбцами DECIMAL в таблице назначения. Следовательно, если вы копируете между базами данных Oracle, столбец NUMBER без точности будет заменен столбцом DECIMAL(38). При копировании между базами данных Oracle вы должны использовать команды SQL (CREATE TABLE AS и INSERT) или убедиться, что ваши столбцы имеют указанную точность.

Предложение USING задает запрос, который называет исходную таблицу и указывает данные, которые COPY копирует в целевую таблицу. Вы можете использовать любую форму команды SQL SELECT для выбора данных, копируемых командой COPY.

Вот пример команды COPY, которая копирует только два столбца из исходной таблицы и копирует только те строки, в которых значение DEPARTMENT_ID равно 30:

Возможно, вам будет проще вводить и редактировать длинные команды COPY в сценариях или в области ввода рабочей области i SQL*Plus, чем пытаться вводить их непосредственно в командной строке.

Управление обработкой таблицы назначения

Вы управляете обработкой целевой таблицы, вводя одно из четырех управляющих предложений — REPLACE, CREATE, INSERT или APPEND.

Предложение REPLACE называет таблицу, которая должна быть создана в целевой базе данных, и определяет следующие действия:

Если целевая таблица уже существует, COPY удаляет существующую таблицу и заменяет ее таблицей, содержащей скопированные данные.

Если целевая таблица еще не существует, COPY создает ее, используя скопированные данные.

Вы можете использовать предложение CREATE, чтобы избежать случайной записи поверх существующей таблицы. CREATE определяет следующие действия:

Если целевая таблица уже существует, COPY сообщает об ошибке и останавливается.

Если целевая таблица еще не существует, COPY создает таблицу, используя скопированные данные.

Используйте INSERT для вставки данных в существующую таблицу. INSERT определяет следующие действия:

Если целевая таблица уже существует, COPY вставляет скопированные данные в целевую таблицу.

Если целевая таблица еще не существует, COPY сообщает об ошибке и останавливается.

Используйте APPEND, если вы хотите вставить данные в существующую таблицу или создать новую таблицу, если целевая таблица не существует. APPEND определяет следующие действия:

Если целевая таблица уже существует, COPY вставляет скопированные данные в целевую таблицу.

Если таблица еще не существует, COPY создает таблицу, а затем вставляет в нее скопированные данные.

Пример B-1 Копирование из удаленной базы данных в локальную базу данных с помощью CREATE

Чтобы скопировать HR из удаленной базы данных в таблицу EMPLOYEE_COPY в вашей собственной базе данных, введите следующую команду:

Обратитесь к своему администратору базы данных, чтобы получить соответствующее имя пользователя, пароль и имя службы для удаленного компьютера, содержащего копию EMPLOYEE_COPY.

Интерпретация сообщений, отображаемых COPY

Первые три сообщения, отображаемые COPY, показывают значения переменных команды SET, которые влияют на операцию COPY. Наиболее важным из них является LONG, который ограничивает длину значения столбца LONG. (LONG — это тип данных, аналогичный CHAR.) Если исходная таблица содержит столбец LONG, COPY усекает значения в этом столбце до длины, заданной системной переменной LONG.

Переменная ARRAYSIZE ограничивает количество строк, которые SQL*Plus одновременно извлекает из базы данных. Это количество строк составляет партию. Переменная COPYCOMMIT задает количество пакетов, после которых COPY фиксирует изменения в базе данных. (Если вы установите COPYCOMMIT равным нулю, COPY зафиксирует изменения только после того, как все пакеты будут скопированы.) Для получения дополнительной информации о переменных SET, в том числе о том, как изменить их настройки, см. команду SET.

После перечисления трех системных переменных и их значений функция COPY сообщает, была ли таблица удалена, создана или обновлена ​​во время копирования. Затем COPY перечисляет количество выбранных, вставленных и зафиксированных строк.

Указание таблицы другого пользователя

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

Например, чтобы создать локальную копию таблицы с именем DEPARTMENT, принадлежащей пользователю ADAMS, в базе данных, связанной с идентификатором подключения Oracle Net BOSTONDB, введите

Конечно, вы могли бы получить тот же результат, указав COPY войти в удаленную базу данных как ADAMS. Однако вы не можете этого сделать, если не знаете пароль, связанный с именем пользователя ADAMS.

Копирование данных между таблицами в одной базе данных

Вы можете копировать данные из одной таблицы в другую в одной базе данных (локальной или удаленной). Чтобы выполнить копирование между таблицами в вашей локальной базе данных, укажите собственное имя пользователя и имя службы для вашей локальной базы данных в предложении FROM или TO (пропустите другое предложение):

Для копирования между таблицами в удаленной базе данных укажите одно и то же имя пользователя и имя службы в предложениях FROM и TO:

Прочитайте эту главу, сидя за компьютером, и попробуйте показанный пример. Прежде чем начать, убедитесь, что у вас есть доступ к примерам таблиц, описанным в SQL*Plus Quick Start.

Команда COPY будет объявлена ​​устаревшей в будущих версиях SQL*Plus. После Oracle 9 i COPY не поддерживает новые типы данных.

Синтаксис команды COPY

где база данных имеет следующий синтаксис:

имя пользователя [/ пароль ]@connect_identifier

Копирует данные из запроса в таблицу в той же или другой базе данных. COPY поддерживает следующие типы данных:

СИМВОЛ ДАТЫ ДЛИННЫЙ НОМЕР VARCHAR2

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

Условия

Описание каждого термина или пункта см. в следующем списке:

База данных, содержащая копируемые данные. Если вы опустите предложение FROM, источником по умолчанию будет база данных, к которой подключен SQL*Plus (то есть база данных, к которой обращаются другие команды). Вы должны использовать предложение FROM, чтобы указать исходную базу данных, отличную от базы данных по умолчанию. Предложение команды COPY FROM не поддерживает привилегированные соединения SYSDBA или SYSOPER.

База данных, содержащая целевую таблицу. Если вы опускаете предложение TO, по умолчанию в качестве места назначения используется база данных, к которой подключен SQL*Plus (то есть база данных, к которой обращаются другие команды). Вы должны использовать предложение TO, чтобы указать целевую базу данных, отличную от базы данных по умолчанию. Предложение TO команды COPY не поддерживает привилегированные соединения SYSDBA или SYSOPER.

Указывает имя пользователя [/ пароль ] @ connect_identifier исходной или целевой базы данных Oracle, которую вы хотите КОПИРОВАТЬ ИЗ или КОПИРОВАТЬ В. Команда COPY не поддерживает привилегированные соединения SYSDBA или SYSOPER. Вы должны указать имя пользователя. SQL*Plus запрашивает пароль, связанный с именем пользователя, указанным в предложениях COPY FROM или COPY TO. SQL*Plus подавляет отображение ответа на ваш пароль.

Вы должны включить предложение connect_identifier, чтобы указать исходную или целевую базу данных. Точный синтаксис зависит от конфигурации Oracle Net. Для получения дополнительной информации обратитесь к руководству по Oracle Net или обратитесь к своему администратору баз данных.

Вставляет строки из запроса в target_table, если таблица существует. Если целевая_таблица не существует, COPY создает ее.

Вставляет строки из запроса в целевую_таблицу после первого создания таблицы. Если target_table уже существует, COPY возвращает ошибку.

Вставляет строки из запроса в target_table . Если target_table не существует, COPY возвращает ошибку. При использовании INSERT запрос USING должен выбирать по одному столбцу для каждого столбца в таблице_назначения.

Заменяет целевую_таблицу и ее содержимое строками из запроса. Если целевая_таблица не существует, COPY создает ее. В противном случае COPY удаляет существующую таблицу и заменяет ее таблицей, содержащей скопированные данные.

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

( столбец , столбец , столбец , . )

Указывает имена столбцов в таблице_назначения. Вы должны заключить имя в двойные кавычки, если оно содержит строчные буквы или пробелы.

Если вы указываете столбцы, количество столбцов должно равняться количеству столбцов, выбранных запросом. Если вы не укажете какие-либо столбцы, скопированные столбцы будут иметь те же имена в целевой таблице, что и в исходной, если COPY создаст целевую_таблицу .

Указывает SQL-запрос (команда SELECT), определяющий, какие строки и столбцы копируются COPY.

Использование

Чтобы включить копирование данных между базами данных Oracle и другими базами данных, столбцы NUMBER заменяются столбцами DECIMAL в таблице назначения. Следовательно, если вы копируете между базами данных Oracle, столбец NUMBER без точности будет заменен столбцом DECIMAL(38). При копировании между базами данных Oracle вы должны использовать команды SQL (CREATE TABLE AS и INSERT) или убедиться, что ваши столбцы имеют указанную точность.

Переменная SQL*Plus SET LONG ограничивает длину копируемых столбцов LONG. Если какие-либо столбцы LONG содержат данные длиннее, чем значение LONG, COPY усекает данные.

SQL*Plus выполняет фиксацию в конце каждой успешной операции COPY. Если для переменной SQL*Plus SET COPYCOMMIT установлено положительное значение n, SQL*Plus выполняет фиксацию после копирования каждых n пакетов записей. Переменная SQL*Plus SET ARRAYSIZE определяет размер пакета.

Некоторые операционные среды требуют, чтобы имена служб заключались в двойные кавычки.

Примеры

Следующая команда копирует всю таблицу EMPLOYEES в таблицу с именем WESTEMPLOYEES. Обратите внимание, что таблицы расположены в двух разных базах данных. Если WESTEMPLOYEES уже существует, SQL*Plus заменяет таблицу и ее содержимое. Столбцы в WESTEMPLOYEES имеют те же имена, что и столбцы в исходной таблице EMPLOYEES.

Следующая команда копирует выбранные записи из EMPLOYEES в базу данных, к которой подключен SQL*Plus. SQL*Plus создает ПРОДАВЦОВ через копию. SQL*Plus копирует только столбцы EMPLOYEE_ID и LAST_NAME, а в месте назначения называет их EMPLOYEE_ID и SA_MAN.

Копирование данных из одной базы данных в другую

Используйте команду SQL*Plus COPY для копирования данных CHAR, DATE, LONG, NUMBER или VARCHAR2 между базами данных и между таблицами в одной базе данных. С помощью команды COPY вы можете копировать данные между базами данных следующими способами:

Скопируйте данные из удаленной базы данных в локальную базу данных.

Скопируйте данные из вашей локальной базы данных (по умолчанию) в удаленную базу данных (большинство систем).

Копировать данные из одной удаленной базы данных в другую удаленную базу данных (большинство систем).

В целом, команда COPY предназначена для копирования данных между базами данных Oracle и другими базами данных. Вы должны использовать команды SQL (CREATE TABLE AS и INSERT) для копирования данных между базами данных Oracle.

Понимание синтаксиса команды COPY

Вы вводите команду COPY в следующей форме:

Вот пример команды COPY:

Чтобы указать базу данных в предложении FROM или TO, необходимо иметь действительное имя пользователя и пароль для локальной и удаленной баз данных и знать соответствующие имена служб Oracle Net. COPY подчиняется требованиям безопасности Oracle Database, поэтому указанному вами имени пользователя должен быть предоставлен доступ к таблицам, чтобы у вас был доступ к таблицам. Чтобы узнать, какие базы данных вам доступны, обратитесь к своему администратору базы данных.

При копировании в локальную базу данных из удаленной базы данных можно опустить предложение TO. Когда вы копируете в удаленную базу данных из вашей локальной базы данных, вы можете опустить предложение FROM. При копировании между удаленными базами данных необходимо включать оба предложения. Однако включение обоих пунктов повышает читабельность ваших сценариев.

Команда COPY ведет себя по-разному в зависимости от того, существует ли уже целевая таблица, и от введенного вами условия действия (CREATE в примере). Дополнительную информацию см. в разделе Управление обработкой таблицы назначения.

По умолчанию скопированные столбцы имеют те же имена в таблице назначения, что и в исходной таблице. Если вы хотите дать новые имена столбцам в целевой таблице, введите новые имена в круглых скобках после имени целевой таблицы. Если вы вводите какие-либо имена столбцов, вы должны ввести имя для каждого копируемого столбца.

Чтобы включить копирование данных между базами данных Oracle и другими базами данных, столбцы NUMBER заменяются столбцами DECIMAL в таблице назначения. Следовательно, если вы копируете между базами данных Oracle, столбец NUMBER без точности будет заменен столбцом DECIMAL(38). При копировании между базами данных Oracle вы должны использовать команды SQL (CREATE TABLE AS и INSERT) или убедиться, что ваши столбцы имеют указанную точность.

Предложение USING задает запрос, который называет исходную таблицу и указывает данные, которые COPY копирует в целевую таблицу. Вы можете использовать любую форму команды SQL SELECT для выбора данных, копируемых командой COPY.

Вот пример команды COPY, которая копирует только два столбца из исходной таблицы и копирует только те строки, в которых значение DEPARTMENT_ID равно 30:

Возможно, вам будет проще вводить и редактировать длинные команды COPY в сценариях, чем пытаться вводить их непосредственно в командной строке.

Управление обработкой таблицы назначения

Вы управляете обработкой целевой таблицы, вводя одно из четырех управляющих предложений — REPLACE, CREATE, INSERT или APPEND.

Предложение REPLACE называет таблицу, которая должна быть создана в целевой базе данных, и определяет следующие действия:

Если целевая таблица уже существует, COPY удаляет существующую таблицу и заменяет ее таблицей, содержащей скопированные данные.

Если целевая таблица еще не существует, COPY создает ее, используя скопированные данные.

Вы можете использовать предложение CREATE, чтобы избежать случайной записи поверх существующей таблицы.CREATE определяет следующие действия:

Если целевая таблица уже существует, COPY сообщает об ошибке и останавливается.

Если целевая таблица еще не существует, COPY создает таблицу, используя скопированные данные.

Используйте INSERT для вставки данных в существующую таблицу. INSERT определяет следующие действия:

Если целевая таблица уже существует, COPY вставляет скопированные данные в целевую таблицу.

Если целевая таблица еще не существует, COPY сообщает об ошибке и останавливается.

Используйте APPEND, если вы хотите вставить данные в существующую таблицу или создать новую таблицу, если целевая таблица не существует. APPEND определяет следующие действия:

Если целевая таблица уже существует, COPY вставляет скопированные данные в целевую таблицу.

Если таблица еще не существует, COPY создает таблицу, а затем вставляет в нее скопированные данные.

Пример B-1 Копирование из удаленной базы данных в локальную базу данных с помощью CREATE

Чтобы скопировать HR из удаленной базы данных в таблицу EMPLOYEE_COPY в вашей собственной базе данных, введите следующую команду:

Обратитесь к своему администратору базы данных, чтобы получить соответствующее имя пользователя, пароль и имя службы для удаленного компьютера, содержащего копию EMPLOYEE_COPY.

Затем SQL*Plus создает таблицу EMPLOYEE_COPY и копирует строки:

В этой команде COPY предложение FROM предписывает COPY подключить вас к базе данных со спецификацией BOSTONDB как HR.

Обратите внимание, что вам не нужна точка с запятой в конце команды; COPY — это команда SQL*Plus, а не команда SQL, хотя она и содержит запрос. Поскольку большинство команд COPY длиннее одной строки, вы должны использовать дефис продолжения строки (-), которому может предшествовать пробел, в конце каждой строки, кроме последней.

Интерпретация сообщений, отображаемых COPY

Первые три сообщения, отображаемые COPY, показывают значения переменных команды SET, которые влияют на операцию COPY. Наиболее важным из них является LONG, который ограничивает длину значения столбца LONG. (LONG — это тип данных, аналогичный CHAR.) Если исходная таблица содержит столбец LONG, COPY усекает значения в этом столбце до длины, заданной системной переменной LONG.

Переменная ARRAYSIZE ограничивает количество строк, которые SQL*Plus одновременно извлекает из базы данных. Это количество строк составляет партию. Переменная COPYCOMMIT задает количество пакетов, после которых COPY фиксирует изменения в базе данных. (Если вы установите COPYCOMMIT равным нулю, COPY зафиксирует изменения только после того, как все пакеты будут скопированы.) Для получения дополнительной информации о переменных SET, в том числе о том, как изменить их настройки, см. команду SET.

После перечисления трех системных переменных и их значений функция COPY сообщает, была ли таблица удалена, создана или обновлена ​​во время копирования. Затем COPY перечисляет количество выбранных, вставленных и зафиксированных строк.

Указание таблицы другого пользователя

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

Например, чтобы создать локальную копию таблицы с именем DEPARTMENT, принадлежащей пользователю ADAMS, в базе данных, связанной с идентификатором подключения Oracle Net BOSTONDB, введите

Конечно, вы могли бы получить тот же результат, указав COPY войти в удаленную базу данных как ADAMS. Однако вы не можете этого сделать, если не знаете пароль, связанный с именем пользователя ADAMS.

Копирование данных между таблицами в одной базе данных

Вы можете копировать данные из одной таблицы в другую в одной базе данных (локальной или удаленной). Чтобы выполнить копирование между таблицами в вашей локальной базе данных, укажите собственное имя пользователя и имя службы для вашей локальной базы данных в предложении FROM или TO (пропустите другое предложение):

Для копирования между таблицами в удаленной базе данных укажите одно и то же имя пользователя и имя службы в предложениях FROM и TO:

Ответ: Вы можете использовать множество приемов, чтобы быстрее копировать данные Oracle с помощью CTAS:

  • Использовать NOLOGGING: ведение журнала отключено, что ускоряет копирование. Однако если вам необходимо выполнить восстановление, вы не сможете выполнить повтор транзакций с помощью этой операции.
  • Используйте предложение parallel: поскольку при копировании таблицы выполняется полное сканирование обеих таблиц, параллельный запрос значительно ускорит копирование (до cpu_count-1).

В этом примере мы быстро копируем данные из одной таблицы в другую на 16-процессорном сервере:

создать таблицу
newtab
parallel 15 без регистрации
как
выбрать /*+parallel(source 15) */ *
из
oldtab;< /p>

Также см. эти примечания по быстрому копированию таблиц/схем Oracle:

Обучение Oracle от Дона Берлесона

Лучшие на сайте «Учебные курсы Oracle» находятся на расстоянии одного телефонного звонка! Вы можете пройти индивидуальное обучение Oracle от Дональда Берлесона прямо в своем магазине!


Бурлесон — американская команда


Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:


и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

При работе с базой данных Oracle вам может потребоваться создать копию таблицы для правильного тестирования или разработки приложения. Мы выбрали лучшие способы выполнения различных типов копирования таблиц в Oracle и предоставили точное описание каждого метода.

В этой статье вы узнаете, как выполнять следующие действия:

  • Создать точную копию таблицы в той же схеме.
  • Копировать только структуру таблицы, не копируя данные.
  • Вставить повторяющиеся данные в уже существующую таблицу
  • Копировать таблицу между разными схемами базы данных
  • Используйте инструмент с графическим интерфейсом для реализации любого типа копирования таблиц

Скопировать таблицу с данными в той же базе данных Oracle

<р>1. Oracle предоставляет удобный синтаксис, который помогает реализовать вышеупомянутые сценарии. С помощью команды «CREATE TABLE… AS SELECT…» вы можете создать дублирующую таблицу в той же схеме базы данных. Чтобы создать точную копию таблицы с сохранением структуры таблицы и всех данных, выполните запрос следующим образом:

<р>2. Если вы хотите ограничить копирование данных определенными столбцами, укажите имена столбцов после SELECT следующим образом:

<р>3. При условии, что вы уже создали таблицу и хотите вставить в нее данные из существующей таблицы, выполните следующее:

Скопировать таблицу без данных в той же базе данных Oracle

<р>4. В некоторых случаях может потребоваться скопировать структуру таблицы, но оставить данные. Точно так же вы можете использовать команду «CREATE TABLE … AS SELECT …», но на этот раз вам нужно изменить ее, добавив предложение WHERE, которое является ложным и, следовательно, не будет выбирать никакие данные, например:

Скопировать таблицу из одной базы данных Oracle в другую

<р>5. Чтобы скопировать таблицу из одной схемы базы данных в другую, необходимо применить команду SQL*Plus COPY. Эта мощная команда позволяет вам копировать данные между разными серверами. Однако мы сосредоточимся на копировании таблицы между различными схемами базы данных в Oracle. Основной синтаксис команды выглядит следующим образом:

Давайте определим важные предпосылки для использования этой команды:

  • Вы должны иметь доступ к указанным таблицам и знать действительные учетные данные для локальной и удаленной баз данных в предложении FROM и/или TO.
  • Вы можете указать новые имена для столбцов в целевой таблице, в противном случае они будут иметь те же имена по умолчанию.
  • Вы должны выбрать одно из четырех действий: ЗАМЕНИТЬ, СОЗДАТЬ, ВСТАВИТЬ или ПРИСОЕДИНИТЬ, в зависимости от того, что подходит для вашего конкретного случая.
  • В предложении USING вам нужно написать запрос, который будет использоваться для указания данных для копирования. Здесь вы можете использовать любой тип SELECT.

Чтобы создать новую таблицу, а затем скопировать данные, используйте CREATE; для заполнения созданной таблицы данными используйте INSERT; чтобы заменить созданную таблицу вместе с ее содержимым, используйте REPLACE. Кроме того, вы можете использовать APPEND, который работает в обоих направлениях: если вы создали новую таблицу, она заполнит ее данными; если нет, он сначала создаст таблицу, а затем вставит необходимые данные.

Давайте рассмотрим пример команды COPY, которая копирует три столбца из исходной таблицы и копирует только те строки, в которых значение EMPLOYEE_ID больше 50:

Создайте дубликат таблицы
с помощью dbForge Studio для Oracle

Выполнение запросов вручную требует значительных затрат времени, поэтому, если вы стремитесь к эффективности, вам, вероятно, захочется использовать Oracle IDE, которая поможет вам достичь ваших целей в удобном графическом пользовательском интерфейсе и повысит вашу гибкость благодаря возможности настроить процесс в соответствии с вашими требованиями.

Шаг 1. Откройте dbForge Studio для Oracle

Прежде всего вам следует запустить dbForge Studio для Oracle и подключиться к вашей базе данных, как показано на скриншоте.

Выберите тип подключения и введите правильные учетные данные для вашего экземпляра базы данных Oracle. При необходимости проверьте соединение.

Свойства подключения к базе данных

Шаг 2. Создайте новую таблицу

В обозревателе баз данных щелкните узел соединения и найдите папку Tables. Щелкните правой кнопкой мыши папку "Таблицы" и выберите "Новая таблица".

Нажмите

Шаг 3. Создайте структуру таблицы

В открывшемся редакторе таблиц укажите имя новой таблицы и создайте структуру таблицы.

Необходимо убедиться, что столбцы таблицы и свойства столбцов совпадают со столбцами существующей таблицы.

Нажмите «Применить изменения» и убедитесь, что вы создали новую таблицу в проводнике баз данных.

Окно редактора таблиц

Шаг 4. Откройте мастер сравнения данных

Теперь вы можете заполнить таблицу данными. Для этого перейдите на вкладку «Сравнение» в меню и откройте «Мастер сравнения данных». Укажите подключение и выберите схему.

При необходимости настройте остальные параметры сравнения.

Источник и цель для сравнения данных

Шаг 5. Настройте параметры сравнения данных

Если вы хотите скопировать данные в таблицу в той же схеме Oracle, перейдите на страницу сопоставления и выберите таблицы для сопоставления. Здесь вы можете сопоставлять таблицы с разными именами и структурами.

Нажмите кнопку «Сопоставление объектов» на панели инструментов, и появится диалоговое окно «Сопоставление объектов». Там вам нужно указать исходную и целевую таблицы и нажать Map. После этого объекты появятся в сетке вкладки Mapping. Вы можете пропустить сопоставление таблиц, если хотите сравнить данные между разными схемами. Теперь нажмите «Сравнить», чтобы начать сравнение.

Вкладка

Шаг 6. Анализ результатов сравнения

Просмотрите результаты сравнения в документе "Сравнение данных". Здесь вы можете выбрать необходимые объекты для синхронизации и инициировать синхронизацию, нажав на зеленую стрелку.

Результаты сравнения, показывающие различия< бр />

Шаг 7. Определите параметры синхронизации

В открывшемся Мастере синхронизации данных вы можете определить свои дальнейшие действия относительно скрипта синхронизации.

Вы можете открыть сценарий во внутреннем редакторе, сохранить его для последующего использования или выполнить непосредственно против цели.

Параметры вывода для сценария синхронизации

Шаг 8. Продолжайте настройку синхронизации данных

После этого вы можете настроить параметры синхронизации данных, а также проверить план действий и список предупреждений на вкладке «Сводка». Нажмите «Синхронизировать», чтобы начать синхронизацию данных.

Вкладка

Шаг 9. Убедитесь, что таблицы равны

Выполните сравнение данных еще раз, чтобы убедиться, что таблицы идентичны. Поздравляем! Вы клонировали таблицу Oracle!

Документ сравнения данных показывает, что таблицы равны

Заключение

В этой статье мы рассмотрели различные способы создания дублирующей таблицы в Oracle: мы начали с выполнения команд Oracle SQL, а затем рассмотрели, как те же процедуры выполняются с помощью интуитивно понятного интерфейса dbForge Studio для Oracle. Среда IDE предоставляет надежные функции сравнения и позволяет вывести взаимодействие с базой данных Oracle на совершенно новый уровень. Ознакомьтесь с другими полезными функциями этого мощного инструмента Oracle GUI!

Читайте также: