Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 sqlplus команда copy  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 540
Добрый день. Вопрос по команде COPY из sqlplus:

Пытаюсь скопировать данные из таблицы из одной базы в другую. В доке по команде copy следующий синтаксис:
COPY {FROM database | TO database | FROM database TO database} {APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ...)]
USING query


Но я чет нигде не нашел ограничений, с тем, чтоб кол-во столбцов в разделе [(column, column, column, ...)] должно совпадать с кол-вом столбцов в таблице в которую мы копируем, есть только про то, что кол-во должно совпадать с кол-вом в селекте (что логично)

(column, column, column, ...)
Specifies the names of the columns in destination_table. You must enclose a name in double quotes if it contains lowercase letters or blanks.

If you specify columns, the number of columns must equal the number of columns selected by the query. If you do not specify any columns, the copied columns will have the same names in the destination table as they had in the source if COPY creates destination_table.

Получается что [(column, column, column, ...)] не используется для APPEND/INSERT, но об этом забыли написать? Или я как-то не так вызов делаю?
4 апр 19, 16:39    [21852973]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5333
Вы рассуждаете чисто теоретически, или вы получаете конкретную ошибку в конретной ситуации?

"Лучше один раз увидеть, чем сто раз услышать..."
4 апр 19, 18:58    [21853144]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5333
https://docs.oracle.com/database/121/SQPUG/apb.htm#SQPUG140
By default, the copied columns have the same names in the destination table that they have in the source table.
If you want to give new names to the columns in the destination table, enter the new names in parentheses after the destination table name. If you enter any column names, you must enter a name for every column you are copying.

j2k
Получается что [(column, column, column, ...)] не используется для APPEND/INSERT, но об этом забыли написать?

При APPEND/INSERT destination таблица уже существует, имена столбцов "пришиты крепко, не оторвёшь".
Теперь перечитываем выденное во фрагменте из доки и думаем...
5 апр 19, 07:49    [21853482]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5333
Поправлюсь относительно APPEND
Use INSERT to insert data into an existing table.
Use APPEND when you want to insert data in an existing table, or create a new table if the destination table does not exist.

Но ваш вопрос, полагаю, относится к уже сущестующим таблицам.
5 апр 19, 07:56    [21853484]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
Viewer
Member

Откуда: Самара
Сообщений: 5333
P.S.
Note:
In general, the COPY command was designed to be used for copying data between Oracle and non-Oracle databases.
You should use SQL commands (CREATE TABLE AS and INSERT) to copy data between Oracle databases.
5 апр 19, 08:24    [21853503]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
-2-
Member

Откуда:
Сообщений: 14504
Note:
In general, the COPY command was designed to be used for copying data between Oracle and non-Oracle databases.
You should use SQL commands (CREATE TABLE AS and INSERT) to copy data between Oracle databases.
Non-Oracle требует разворачивания гетерогенки. И, с другой стороны, CTAS требует создания дблинка на стороне сервера, который может работать и с HS. Достаточно странно приводить в качестве замены неравнозначную архитектуру для одной из функций.
Возможно деперекейт команды copy толкает документописателей на подобную ахинею.
5 апр 19, 10:13    [21853619]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
rpovarov
Member

Откуда:
Сообщений: 62
-2-
CTAS требует создания дблинка на стороне сервера, который может работать и с HS

Бывают ситуации, когда DBA не хотят создавать dblink. Причины разные, от лени до бюрократии или саботажа. Или сервера находятся в сети настолько "далеко" друг от друга, между ними куча файрволов, что для решения задачи надо привлекать сисадминов из нескольких разных отделов или филилов, что тоже не добавляет скорости к решению...
А данные нужны вчера. Тогда COPY или BRIDGE из SQLcl очень в тему.
5 апр 19, 11:09    [21853709]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 540
Первоначальную ошибку я словил на невозможности вставить данные в таблицу с виртуальным столбцом (ORA-54013: Операция INSERT для виртуальных столбцов запрещена). Попытался ее обойти перечислением необходимых столбцов, выкинув оттуда виртуальный (как мне показалось из документации COPY это позволяет, но как оказалось - нет). Получил ошибку (CPY-0007: Select - список содержит меньше столбцов, чем конечная таблица)
IMHO, в доке это как-то уж очень не очевидно написано
PS проблему в итоге обошли удалением виртуального столбца перед копированием и созданием его заново после копирования
5 апр 19, 11:47    [21853788]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
-2-
Member

Откуда:
Сообщений: 14504
j2k
проблему в итоге обошли удалением виртуального столбца
invisible
5 апр 19, 12:04    [21853830]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 540
-2-
invisible

Речь о invisible column ? у нас 11g :(
5 апр 19, 12:31    [21853891]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18015
А версия самого sqlplus ?
Более старшая может просто ничего не знать о виртуальных столбцах
5 апр 19, 13:25    [21853972]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7513
-2-
....Non-Oracle требует разворачивания гетерогенки....

В древние, древние времена Net 8, non oracle мог жить на клиенте без всяких гетерогенок и прочего.

OCA (Open Client Adapter)

Т.ч., подозреваю, этот кусок доки из тех древних времен. Когда на клиенте можно было подцепится к ODBC через OCA и sqlplus командой COPY затолкать таблицу в Oracle.

AFAIK
5 апр 19, 13:41    [21853993]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 540
Вячеслав Любомудров
А версия самого sqlplus ?

12.2.0.1.0
5 апр 19, 13:49    [21854008]     Ответить | Цитировать Сообщить модератору
 Re: sqlplus команда copy  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 540
-2-, Вячеслав Любомудров
да с invisble сработало (ошибочно думал, что для этого именно база нужна 12 версии). Спасибо большое.
5 апр 19, 14:19    [21854051]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить