powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подрезать строку VARCHAR2 при вносе в таблицу
11 сообщений из 11, страница 1 из 1
Подрезать строку VARCHAR2 при вносе в таблицу
    #40003724
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Сегодня получил 500-символьное сообщение о внутренней ошибке Оракла, что довольно нечасто, похоже мне везет на них.

Моя функция поймала exception, и при попытке записать в лог ошибок превысила размер одного из параметров (300).

Код: plsql
1.
2.
3.
4.
      insert into ERROR_LOG 
             (err_time, err_source, err_sessid, err_type, err_text, err_param)
      values (SYSDATE,  p_source,   p_sessid,   p_sev,    p_msg,    p_param );
      commit; -- можно, т.к. LogError() содержит "pragma autonomous_transaction"



Я могу сделать substr( p_msg, 1, 300 ), но потом изменится таблица, и надо будет об этом помнить..
Не прибегая к магическим числам, за которыми потом нужно следить, как лучше уместить длинные строки в таблицу?
Например:
- особый обрезающий инсерт, который подрежет все строчки вместо выкидывания с ошибкой, или
- функция PL/SQL, которая возвращает максимальный размер колонки (или переменной, я умею ERROR_LOG.err_text%TYPE)
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40003733
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно незачем экономить сотни байт на записи. Видал проекты, где надо было журналировать и ситуацию, которая привела к ошибке, включая большие данные, там не парились и делали сразу CLOB в журнале.

Актуальность журнала редко простирается дальше одного-двух лет. Тем более с современными объемами данных это копейки.

Если очень хочется, можно exception when BIG_MESSAGE then insert into BIG_LOG.

Размер колонок - в user_tab_columns.
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40003734
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

Я даже не подумал об этом. Предел табличной varchar2 - 4kb, и проблема решена..
Так и сделаю, спасибо.
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40003763
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
dmdmdm,

Я даже не подумал об этом. Предел табличной varchar2 - 4kb, и проблема решена..
Так и сделаю, спасибо.
до Оракл-12/19 ты еще не добрался
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40003795
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
до Оракл-12/19 ты еще не добрался


я чет даж пропустил что оно уже с 12-ки

.....
stax
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40004031
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx
НеофитSQL
dmdmdm,

Я даже не подумал об этом. Предел табличной varchar2 - 4kb, и проблема решена..
Так и сделаю, спасибо.
до Оракл-12/19 ты еще не добрался


Не уверен, что вы хотите сказать, что в 12 увеличили максимальную длину поля varchar2 до 32кб в таблицах?
Увеличение размера до 4000 (и ручная транкация по 4000 при вставке, на всякий случай) решило мою проблему.
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40004037
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
до Оракл-12/19 ты еще не добрался

не смотрел, как в 19, но в 12 лимит меняется необратимым alter system. мы при миграции долго думали, но в итоге не рискнули.
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40004046
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кит северных морей,

почему не рискнули? вкратце, конечно, если можно.
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40004053
Фотография кит северных морей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790
кит северных морей,

почему не рискнули? вкратце, конечно, если можно.
если коротко, то перестраховались. конкретной технической причины не было. уже существующая система с обширной кодовой базой переезжала с другой СУБД на Oracle. не было полного понимания, как система поведет себя с лимитами в 32к, и не было времени и ресурсов это понимание приобретать. в итоге решили, что 4к нам вполне достаточно; в паре мест, где в 4к реально не помещались, сделали clob.
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40004064
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
K790
кит северных морей,

почему не рискнули? вкратце, конечно, если можно.
одна из самых больших проблем это индексы на таких столбцах без cast или substr не создаются. Даже если их добавишь потом геморрой с переписыванием запросов под эти индексы
...
Рейтинг: 0 / 0
Подрезать строку VARCHAR2 при вносе в таблицу
    #40004071
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
xtender
K790
кит северных морей,

почему не рискнули? вкратце, конечно, если можно.
одна из самых больших проблем это индексы на таких столбцах без cast или substr не создаются. Даже если их добавишь потом геморрой с переписыванием запросов под эти индексы
ORA-01450: Maximum Key Length (6398) Exceeded
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подрезать строку VARCHAR2 при вносе в таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]