Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подрезать строку VARCHAR2 при вносе в таблицу / 11 сообщений из 11, страница 1 из 1
29.09.2020, 03:13
    #40003724
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подрезать строку VARCHAR2 при вносе в таблицу
Всем привет!

Сегодня получил 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
29.09.2020, 06:46
    #40003733
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подрезать строку VARCHAR2 при вносе в таблицу
Совершенно незачем экономить сотни байт на записи. Видал проекты, где надо было журналировать и ситуацию, которая привела к ошибке, включая большие данные, там не парились и делали сразу CLOB в журнале.

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

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

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

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

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


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

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

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


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

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

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

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

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

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


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