Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переставить столбец в ORACLE, Как? 
:(
    Опции темы
Song
Дата 3.8.2005, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: нет
Всего: 4



Сабж.
Необходимо поменять местами столбцы.


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
LSD
Дата 3.8.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 18
Всего: 537



По моему без потери данных нельзя это можно сделать только правкой словаря, что не есть гут. А с потерей так:
Код
create table COL_RENAME
(
 ID          RAW(16) default sys_guid() primary key,
 TEXT_COL    VARCHAR2(50),
 NUMBER_COL  NUMBER
);

alter table COL_RENAME rename column TEXT_COL to NUMBER_COL_NEW;

alter table COL_RENAME rename column NUMBER_COL to TEXT_COL;

alter table COL_RENAME rename column NUMBER_COL_NEW to NUMBER_COL;

alter table COL_RENAME modify (NUMBER_COL number, TEXT_COL varchar2(50));

ну или drop column и add column.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AntonSaburov
Дата 3.8.2005, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 118



А зачем ?

Теория баз данных как раз подразумевает, что порядок столбцов не должен иметь значения. Я помню в том же FoxPro (7-й версии) ответ на запрос не гарантировал тот же порядок полей, что и порядок полей в запросе. Не совсем наверно это корректно, но тем не менее.

Так что не вижу смысла.
PM MAIL WWW ICQ   Вверх
igon
Дата 4.8.2005, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 7
Всего: 21



Код

Create Table column_order
  (One        NUMBER(9),
   Two        VARCHAR2(30),
   Three      DATE)
...
Create Table column_order_new As 
  Select Three, Two, One From column_order
  
Drop column_order

Create Table column_order As 
  Select * From column_order_new

Drop colunm_order_new

Constraints, Indexes и пр. на отдельные поля и таблицу придется пересоздавать.
Понятно, что вариант далеко не самый элегантный...



--------------------
Хотите поговорить об этом?
PM   Вверх
Song
Дата 4.8.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: нет
Всего: 4



Смысл в том, что открывая таблицу в PL/SQL Developer'е, делается такой запрос SELECT * FROM ...
И столбцы выводятся в порядке как они созданы.
Но таблица, скажем так, была создана "не совсем продуманно" и важные поля (в плане визуального наблюдения на момент разработки) находятся за полосой прокрутки. А их надо видеть.
Конечно можно изменить запрос и выбирать только нужные столбцы, но в этом случае навигация по таблицам существенно замедлится.

Это сообщение отредактировал(а) Song - 4.8.2005, 14:25


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
LSD
Дата 4.8.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 18
Всего: 537



Можно конечно словарь подправить, такой запрос вернет все колонки для заданной таблицы:
Код
select c.* from sys.obj$ o, sys.col$ c, sys.user$ u
where u.name = 'SCOTT' and u.user# = o.owner# and o.name = 'PERSON' and c.obj# = o.obj#

порядковый номер колонки содержится в COL#.

Disclaimer: за развал базы в случае чего, я не овечаю smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
igon
Дата 4.8.2005, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 7
Всего: 21



ИМХО, исходная постановка задачи не совсем корректна: требуется не ПЕРЕСТАВЛЯТЬ столбцы, а ОТОБРАЗИТЬ их в нужной последовательности - в любой момент разработки "важными" могут стать другие поля. И что, опять их переставлять?
Вариант: пусть рабочая схема WORK. Создай схему TEST и помести в нее VIEW на все нужные таблицы WORK, причем имя TEST.VIEW == имя WORK.Table. Нужная последовательность полей во View задается тривиально.
Разработчик работает со схемой TEST, единственное для него "неудобство" - выбирать не из "Tables", а из "Views"


--------------------
Хотите поговорить об этом?
PM   Вверх
mx1234567
Дата 9.10.2015, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.4.2013

Репутация: нет
Всего: нет



Цитата(Song @ 3.8.2005,  08:37)
Сабж.
Необходимо поменять местами столбцы.

Вот так работает:

Код

create table t1 (t1_key number, t1_value varchar2(10));

insert into t1 values(1, '1');

insert into t1 values(2, '2');

insert into t1 values(3, '3');

insert into t1 values(4, '4');

insert into t1 values(5, '5');

insert into t1 values(6, '6');

insert into t1 values(7, '7');

insert into t1 values(8, '8');

insert into t1 values(9, '9');

 

--delete t1

 

select * from t1

 

select do.owner,

       do.object_name,

       sc.name colname,

       sc.col#,

       sc.segcol#,

       sc.intcol#,

       sc.OBJ#,

       sc.COL#

   from sys.col$ sc, dba_objects do

   where

   do.object_id = sc.obj#

   and do.object_type='TABLE'

   and do.OBJECT_NAME='T1'

 

--Нужен обмен, через 0, т.к. FK по уникальности для col# срабатывает

 

update sys.col$

set

col# = 0

--segcol# = 0, --Нельзя испортит, данные

--intcol# = 0   

where

obj# in

(

select sc.obj#

   from sys.col$ sc, dba_objects do

   where

   do.object_id = sc.obj#

   and do.object_type='TABLE'

   and do.OBJECT_NAME='T1'

)

and name='T1_KEY';

 

update sys.col$

set

col# = 2

where

obj# in

(

select sc.obj#

   from sys.col$ sc, dba_objects do

   where

   do.object_id = sc.obj#

   and do.object_type='TABLE'

   and do.OBJECT_NAME='T1'

)

and name='T1_VALUE';

 

update sys.col$

set

col# = 1

where

obj# in

(

select sc.obj#

   from sys.col$ sc, dba_objects do

   where

   do.object_id = sc.obj#

   and do.object_type='TABLE'

   and do.OBJECT_NAME='T1'

)

and name='T1_KEY';

 

ALTER SYSTEM FLUSH SHARED_POOL

 

select * from t1
 

PM MAIL   Вверх
Akina
Дата 9.10.2015, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 453



Цитата(Song @  4.8.2005,  15:23 Найти цитируемый пост)
делается такой запрос SELECT * FROM ...

Решение простое - не делай ТАКОЙ запрос, указывай явно нужные поля в нужном порядке.

PS. Нет, когда лень не даёт перечислять поля, потому что можно влепить звёздочку - это ещё худо-бедно можно понять. Но позволить лени сделаться настолько глобальной, чтобы ради неё лопатить структуру - это уже перебор...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 9.10.2015, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Akina, вопрос поставлен десятилетие назад  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

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

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.