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

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

create table TABALL as
select * from TAB1
join TAB2 on TAB1.ID = TAB2.TAB_1_ID
join TAB3 on TAB2.ID = TAB3.TAB_2_ID


Проблема в том, что имеются дублирующие поля, например ID в некоторых таблицах, соответственно возникает:
Error: ORA-00957: дублируется имя столбца

Можно ли это как-то обойти? Количество и имена столбцов могут меняться, поэтому заменить * на перечисление явно всех столбцов не катит.
Единственный вариант , но он самый кривой и не красивый и использовать его я бы не хотела - это достать из вьюхи USER_TAB_COLS все имена столбцов требуемых таблиц переназвать их и выполнить create table через dsql.

Может есть еще какие-то варианты?
24 ноя 14, 11:03    [16895058]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
varlamovvp
Member

Откуда: Moscow
Сообщений: 298
Marishka25,

как вариант - создать таблицу TABALL заранее и заливать через INSERT.
24 ноя 14, 11:15    [16895148]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54396
а чего именно ТС хочет?

Например, в тбл1 есть поле User(Number), в тбл2 есть поле User(Varchar2) и в тбл3 есть поле User(Date).
Или во всех тбл есть Parent_Id, но совершенно с разной информационной наполненностью

Чего делать-то?
24 ноя 14, 11:33    [16895267]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54396
Marishka25
все имена столбцов требуемых таблиц переназвать их

каким образом переназвать имя поля длиной в максимальное количество символов?
24 ноя 14, 11:35    [16895278]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
Marishka25
Member

Откуда:
Сообщений: 150
varlamovvp,
а есть ли в этом смысл, если заранее не известно количество столбцов? все равно сводную таблицу необходимо создавать будет через кривой вариант с dsql.
на большом количестве записей insert работает очень долго.
24 ноя 14, 11:38    [16895313]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
Marishka25
Member

Откуда:
Сообщений: 150
andreymx
Marishka25
все имена столбцов требуемых таблиц переназвать их

каким образом переназвать имя поля длиной в максимальное количество символов?


вот это хороший вопрос, если такой вариант возникнет, тогда т.к. нам по сути не важны имена столбцов в сводной таблице (желательно конечно, что бы столбцв имели максимально интуитивно понятные имена), можно делать проверку длинны и обрезать имя, вставляя префикс.
24 ноя 14, 11:46    [16895381]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
Marishka25
Member

Откуда:
Сообщений: 150
andreymx
а чего именно ТС хочет?

Например, в тбл1 есть поле User(Number), в тбл2 есть поле User(Varchar2) и в тбл3 есть поле User(Date).
Или во всех тбл есть Parent_Id, но совершенно с разной информационной наполненностью

Чего делать-то?


особо не имеет значения какого типа поля и какие в них данные. Достаточно будет User, User_1, User_2

Картинка с другого сайта.
24 ноя 14, 11:52    [16895445]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
-2-
Member

Откуда:
Сообщений: 15330
Marishka25
Может есть еще какие-то варианты?
делать несколько таблиц.
24 ноя 14, 11:54    [16895465]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54396
интересно, как обращаться к таблице, поля которой имеют неизвестное наименование
24 ноя 14, 12:23    [16895643]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
guest_Svetlanka
Guest
Marishka25
Единственный вариант , но он самый кривой и не красивый и использовать его я бы не хотела - это достать из вьюхи USER_TAB_COLS все имена столбцов требуемых таблиц переназвать их и выполнить create table через dsql.

Может есть еще какие-то варианты?

Как по мне так единственный вариант (при заданных условиях) - это тот который вы назвали - через вью USER_TAB_COLS.

Или ... в том же ТОАD (SQL Editor) выполнить запрос select...join... - и выведенные результаты селекта сохранить через Save as (Save Grid Contents) - Insert Statements - ну и потом отработать полученный sql с insert-ами.
Все дублирующие колонки автоматически имеют имя .. _1, .. _2 и т.д.
24 ноя 14, 13:29    [16896121]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
Den89
Member

Откуда: Санкт-Петербург
Сообщений: 351
А есть возможность в оракле создать DDL триггер, который бы проверял длину атрибутов, чтобы не превышала 25-27 символов для заданных таблиц? Оставшиеся символы для префиксов атрибутов сводной таблицы.
24 ноя 14, 14:10    [16896401]     Ответить | Цитировать Сообщить модератору
 Re: create table as и дублирующие столбцы  [new]
уувуукукуку
Guest
Marishka25
Подскажите пожалуйста, есть некая конструкция, которая сливает данные в одну сводную таблицу, в которую должны попадать все без исключения столбцы из нескольких других таблиц:

create table TABALL as
select * from TAB1
join TAB2 on TAB1.ID = TAB2.TAB_1_ID
join TAB3 on TAB2.ID = TAB3.TAB_2_ID


Проблема в том, что имеются дублирующие поля, например ID в некоторых таблицах, соответственно возникает:
Error: ORA-00957: дублируется имя столбца

Вы так и не поняли в чем проблема.
НЕВОЗМОЖНО получить 2 столбца с одинаковыми именами.
Select у вас проходит только потому, что дубликаты автоматически меняют имена.
Попробуйте:
select * from (
select * from TAB1
join TAB2 on TAB1.ID = TAB2.TAB_1_ID
join TAB3 on TAB2.ID = TAB3.TAB_2_ID )

Соответственно, ваша проблема испаряется, вы хотите получить уникальные имена полей - вам их и задавать.
Никак по иному.
24 ноя 14, 14:25    [16896515]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить