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

Откуда:
Сообщений: 4116
Честно поискал по форуму - в том числе и в ТОП10...
Таблица уже создана, а мне надо вставить впереди всех столбцов еще один с ключевым значением. По смыслу столбец должен стоять именно впереди всех. В MS SQL это делается легким движением левой ноги.
А супер Оркал это проблемища как то решаетца???
4 сен 07, 02:22    [4615465]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
х.з.
Member

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

а что значит "впереди" select * выводит его первым или хранится он в блоках БД в соответствующем месте?

Думаю что сиквел сервер делает только первое.
4 сен 07, 02:33    [4615469]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Alexsalog
Member

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

а что значит "впереди" select * выводит его первым или хранится он в блоках БД в соответствующем месте?

Думаю что сиквел сервер делает только первое.


Безусловно SQL не перемещает никуда блоки, да и в системных таблицах объектов последний добавленный столбец хранится в последней строчке. Но видимо есть параметр сортировки в представлении столбцов для разработчика БД. Потому что когда я смотрю на структуру таблицы имеет значение не только то что данные великолепно хранятся и извлекаются, но и имеет значение способ предсталения метаданных для "удобства восприятия". Очень немаловажный момент когда столбов очень много. Это так же как отступы и понятное именование функций и процедур....
4 сен 07, 03:11    [4615481]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
х.з.
Member

Откуда:
Сообщений: 765
обычно впереди стоят _ключевые_ столбцы - в том смысле что важные. Типа primary key.
И если вы его забыли при создании то drop/create вам в помощь.

да есть "порядковый номер" и название столбца - но нельзя вставить 2.5 номер или -1 . Это же внутренняя кухня.
4 сен 07, 03:23    [4615483]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
after
Member

Откуда:
Сообщений: 13
порядок полей не имеет значения
4 сен 07, 05:19    [4615499]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
х.з.
Member

Откуда:
Сообщений: 765
after
порядок полей не имеет значения

я б поостерегся

it depends
4 сен 07, 05:29    [4615501]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Не, ну можно, конечно, извратиться с логическим порядком столбцов. Но это неподдерживаемо, недокументированно и небезопасно
tst> create table t1 as select dummy, rownum n from dual;

Table created.

tst> select * from t1;

D          N
- ----------
X          1

tst> select col#, name, intcol# from sys.col$ where obj#=(select object_id from dba_objects
  2  where object_name='T1' and owner='SYS');

      COL# NAME                              INTCOL#
---------- ------------------------------ ----------
         1 DUMMY                                   1
         2 N                                       2

tst> update sys.col$ set col#=3-col# where obj#=(select object_id from dba_objects
  2  where object_name='T1' and owner='SYS');

2 rows updated.

tst> commit;

Commit complete.

tst> select col#, name, intcol# from sys.col$ where obj#=(select object_id from dba_objects
  2  where object_name='T1' and owner='SYS');

      COL# NAME                              INTCOL#
---------- ------------------------------ ----------
         2 DUMMY                                   1
         1 N                                       2

tst> alter system flush shared_pool;

System altered.

tst> select * from t1;

         N D
---------- -
         1 X

tst> insert into t1 values (5, 'Y');

1 row created.

tst> select * from t1;

         N D
---------- -
         1 X
         5 Y

tst> insert into t1 values ('Z', 8);
insert into t1 values ('Z', 8)
                       *
ERROR at line 1:
ORA-01722: invalid number
4 сен 07, 05:52    [4615509]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
after
Member

Откуда:
Сообщений: 13
х.з.
after
порядок полей не имеет значения

я б поостерегся
it depends

пример?
т.к. лично я поостерегся бы систем, в которых порядок полей в таблице имеет значение
4 сен 07, 06:35    [4615519]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
hoarfrost
Member

Откуда: Волгоград
Сообщений: 438
Alexsalog
х.з.
имхо вперед можно добавить только пересозданием таблицы.

а что значит "впереди" select * выводит его первым или хранится он в блоках БД в соответствующем месте?

Думаю что сиквел сервер делает только первое.


Безусловно SQL не перемещает никуда блоки, да и в системных таблицах объектов последний добавленный столбец хранится в последней строчке. Но видимо есть параметр сортировки в представлении столбцов для разработчика БД. Потому что когда я смотрю на структуру таблицы имеет значение не только то что данные великолепно хранятся и извлекаются, но и имеет значение способ предсталения метаданных для "удобства восприятия". Очень немаловажный момент когда столбов очень много. Это так же как отступы и понятное именование функций и процедур....

Вставка столбца в MSSQL в середину таблицы в Enterprise Manager осуществляется за счёт:

1. DROP-ания всех Constraint-ов на на таблицу;
2. Создания временной таблицы со структурой, совпадающей с новой;
3. Копированием в неё всех данных из первой таблицы;
4. Удалением исходной и переименованием временной таблицы.

Кто не верит - может посмотреть на скрипт, который генерит Enterprise Manager. Кто всё равно не поверит - добавить столбец на таблице в несколько миллионов строк. :D

Пос стандартному же запросу ALTER TABLE... MSSQL также "добропорядочно" добавляет столбец в конец таблицы.
4 сен 07, 06:37    [4615521]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
after
х.з.
after
порядок полей не имеет значения

я б поостерегся
it depends

пример?
т.к. лично я поостерегся бы систем, в которых порядок полей в таблице имеет значение
Пример -- хранение данных (NULL в частности)
Т.е. именно с физической точки зрения, а не с логической
4 сен 07, 06:43    [4615525]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
after
Member

Откуда:
Сообщений: 13
Вячеслав Любомудров

хранение данных (NULL в частности)
Т.е. именно с физической точки зрения, а не с логической

гм.. с физическим аспектом готов согласиться
если не сложно, ссылочку?
4 сен 07, 06:59    [4615537]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Владимир Бегун
Member

Откуда: Redwood Shores, CA USA
Сообщений: 1707
Alexsalog
А супер Оркал это проблемища как то решаетца???

- Как вы расслабляетесь?
- А мы не напрягаемся :-)

Проблема может возникать только тогда когда до нужного столбца "долго" добираться -- chained rows/IOTs overflow. Способы:

1) CTAS
2) add/drop column/rename column... циклично/или просто поменять один с другим.
Циклично, например так:

CREATE TABLE x(c1 NUMBER, c2 NUMBER, c3 NUMBER);
INSERT INTO x VALUES(1, 2, 3);
INSERT INTO x VALUES(1, 2, 3);
INSERT INTO x VALUES(1, 2, 3);
COMMIT;
SELECT ROWID, x.* FROM x;
ALTER TABLE x ADD (cN NUMBER) ADD (c2P NUMBER) ADD (c3P NUMBER);
UPDATE x SET c2P = c2, c3P = c3;
ALTER TABLE x DROP (c2, c3);
ALTER TABLE x RENAME COLUMN c2p TO c2;
ALTER TABLE x RENAME COLUMN c3p TO c3;
SELECT ROWID, x.* FROM x;
CTAS может быть быстрее если число столбцов велико, да и UPDATE можно будет "переписать" как INSERT (direct-path INSERT)

А с словаре циферки менять -- это ерунда, проблемы не решает.
4 сен 07, 07:08    [4615540]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Не сложно, но лениво :) (сам я использую pdf)
В концепциях в описании таблиц
4 сен 07, 07:09    [4615542]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Владимир Бегун
А с словаре циферки менять -- это ерунда, проблемы не решает.
Дык было указано, что это только на уровне представления
Мож у него там операторы INSERT без перечисления колонок
Или SELECT *
4 сен 07, 07:11    [4615547]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
х.з.
Member

Откуда:
Сообщений: 765
after
х.з.
after
порядок полей не имеет значения

я б поостерегся
it depends

пример?
т.к. лично я поостерегся бы систем, в которых порядок полей в таблице имеет значение

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

Я бы тоже предпочел чтобы первичный ключ в определнии таблицы был где-то в начале, а не после 100-го столбца :)


тут немного про физическое хранение
4 сен 07, 07:12    [4615548]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Владимир Бегун
Member

Откуда: Redwood Shores, CA USA
Сообщений: 1707
Вячеслав Любомудров
...
сути дела не меняет.
4 сен 07, 07:14    [4615549]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Ну забываю я смайлики ставить
4 сен 07, 07:21    [4615553]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Alexsalog
Member

Откуда:
Сообщений: 4116
Вячеслав Любомудров
Владимир Бегун
А с словаре циферки менять -- это ерунда, проблемы не решает.
Дык было указано, что это только на уровне представления
Мож у него там операторы INSERT без перечисления колонок
Или SELECT *


Все проще - просто при проектировании и перепроектировании структуры таблиц с помощью некого визуального средства, мне проще если колонки расположены по "темам", в группах. По крайней мере, если я использую SQL Navigator и у меня была колонка подразделение (Office), а после неё еще 25 колонок, а потом я решил добавить колонку Головная фирма (ну сущность добавилась в результате реструктуризации предприятия!), то Oracle "добропорядочно" добавит колонку HeadOffice в самый конец и при "чтении" (глазами - а как еще телепатической связи между компьбтером и человеком нееет) указанной структуры другим разработчиком, а может и мной через несколько дней - хаос (который со временем копится) в предствлении полей взору отнюдь не облегчает восприятие, а значит ухудшает сопровождаемость.
Вот и все, речь идет только о визиальном представлении структуры в некой тулзе (может и есть такая) и желательно при select *, потому что это тоже способ исследовать структуру таблицы, но только уже вместе с данными.
4 сен 07, 07:31    [4615558]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Alexsalog
Member

Откуда:
Сообщений: 4116
А может правда, просто есть "тулза" которая хранит порядок полей удобный разработчику...
Там еще группировки можно было бы сделать (по темам).

И быструю замену имен в связанных процедурах, констрейнтах и индексах

Во придумал!
4 сен 07, 08:20    [4615609]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Elic
Member

Откуда:
Сообщений: 29990
Alexsalog
Во придумал!
Ещё одно недоношенное дитя gui. Сами почти ни на что не способны.
4 сен 07, 08:45    [4615643]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Alexsalog
Member

Откуда:
Сообщений: 4116
Elic
Alexsalog
Во придумал!
Ещё одно недоношенное дитя gui. Сами почти ни на что не способны.


О, да... я уверен Вы это сообщение писали сидя перед черным экраном через последовательность комманд прямого доступа к http протоколу...

Да нет, что это я... Наверняка никакого экрана небыло вообще!!!

А я - "недоносок" - сижу понимаешь и все время сверяюсь с монитором что у меня получается.

:-)
4 сен 07, 09:47    [4615885]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Гарри Потный
Member [заблокирован]

Откуда: Херогвартс. Мочу долбоёбов
Сообщений: 138
rename table + create view <+ create <public> synonym><+grant>

но лучше CTAS
4 сен 07, 09:56    [4615921]     Ответить | Цитировать Сообщить модератору
 Re: Вставка столбца!!!!  [new]
Alexsalog
Member

Откуда:
Сообщений: 4116
Гарри Потный
rename table + create view <+ create <public> synonym><+grant>

но лучше CTAS


create table ... nologging as select ...

Да, пожалуй.

Относительно просто и быстро.
4 сен 07, 10:04    [4615963]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить