|
|
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
Есть схема, на которой отлаживаются разработчики и время от времени эта схема перекидывается на preproduction сервер (показывается потенциальным заказчикам). Изначально проект был не наш, но потом нам его передали на доработку, поэтому приходится время от времени править структуру таблиц. Столкнулся с проблемой, что прежние разработчики ориентируясь на 9i, абсолютно игнорировали lob типы данных: надо хранить большой текст - будет varchar2(1000), надо изображение - raw. В итоге иногда происходит обрезка данных :( Вот... Обычный alter table понятное дело тут не пройдет, да и к тому же на таблицы наложены индексы и констрейнты, а сами таблицы тесно завязаны между собой. Сегодня меня это дело достало, залез в ман, но ничего не нашел по теме. Пришлось писать самому. А раз так, то постарался сделать код совместимым с 8i и независимым от пользователя (пакет имеет спецификацию AUTHID CURRENT_USER). Проверил на наших схемах - работает (происходит смена типа данных без потери самих данных, констрейнтов и индексов). Но мало ли что... Нужен взгляд со стороны. Зацените, покритикуйте... Вот сама процедура смены типа , а вот ее проверка . PS: На тех таблицах, что я тестировал, нет составных индексов, поэтому затрудняюсь предположить поведение моей процедуры :) PPS: Здесь сама процедура, не пакет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2003, 20:02 |
|
||
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
Весьма полезная программка. А конвертить LONG/LONG RAW в CLOB/BLOB не приходится? Oracle может не преобразовать к новому типу данных напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2003, 20:28 |
|
||
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
_kozyr А конвертить LONG/LONG RAW в CLOB/BLOB не приходится? Дык... Именно это и приходится делать :) Я ж написал в своем посте об этом - раньше данные лежали в varchar2 или raw. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2003, 20:33 |
|
||
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
RAW и LONG/LONG RAW - это разные типы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. в тоже время Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2003, 20:42 |
|
||
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
Если надо преобразовывать LONG в CLOB и LONG RAW в BLOB, то пригодится ф-я TO_LOB. Но, к сожалению, она работает только для INSERT SELECT и цепочку UPDATE ... set temp_col=col ..., UPDATE ... set col=temp_col вам придется пересматривать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2003, 20:46 |
|
||
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
И еще было бы неплохо в конце процедуры перекомпилировать INVALID'ов, которые появятся после ALTER TABLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2003, 20:53 |
|
||
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
_kozyr RAW и LONG/LONG RAW - это разные типы Согласен! Действительно не то сказал :( Внес изменения для конвертации LONG->CLOB и LONG RAW->BLOB и оформил-таки в виде пакета: спецификация , тело , проверка . Проверил на указанных типах - работает. При попытке их конвертации не в LOB выдается ошибка. Вот только не понял почему не работает автономная транзакция - должна ведь! И еще было бы неплохо в конце процедуры перекомпилировать INVALID'ов, которые появятся после ALTER TABLE Можно, но только у меня нет таких констрейнтов - все валидные! При удалении столбца таблицы удаляются и констрейнты/индексы. Жду замечаний и предложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 15:53 |
|
||
|
Смена типа атрибута таблицы в существующей схеме с данными
|
|||
|---|---|---|---|
|
#18+
Можно, но только у меня нет таких констрейнтов - все валидные! При удалении столбца таблицы удаляются и констрейнты/индексы. Я хотел сказать, что на таблицах могут быть основаны PROCEDURE, FUNCTION, PACKAGES, VIEWS. И все они получат статус INVALID после ALTER TABLE. Эти зависимости можно получить из USER_DEPENDENCIES. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2003, 16:23 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2788&tid=1990940]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 426ms |

| 0 / 0 |
