#oracle #toad
#Oracle #toad
Вопрос:
После обновления с TOAD v12 до v13 функция выполнения от имени сценария (F5) выдает «ORA-06502: PL / SQL: ошибка числа или значения: буфер символьной строки слишком мал» в следующем сценарии:
VAR v_analyzed VARCHAR2(10);
EXEC SELECT TO_CHAR(MAX( LAST_ANALYZED) ) INTO : v_analyzed FROM ALL_TAB_COLUMNS;
TTITLE ALL_TABS
SELECT *
FROM ALL_TAB_COLUMNS
WHERE TRUNC(LAST_ANALYZED) = TO_DATE (:v_analyzed);
TTITLE ANALYZED_DATE
SELECT :v_analyzed AS ANALYZED FROM DUAL;
v12 дает мне хорошие вкладки ниже, используя заголовок в качестве метки вкладки.
Ответ №1:
PL/SQL: numeric or value error: character string buffer too small
возникает везде, где вы объявляете строковую переменную фиксированной длины, и ваш код пытается присвоить значение, длина которого превышает объявленную длину.
Единственное место, где вы объявили строковую переменную v_analyzed
, и вы объявили, что она имеет длину 10 символов. Что произойдет, если вы измените его на больший размер, скажем, на 32 символа? Я думаю, вы увидите, что проблема исчезнет.
В данном случае произошло то, что, скорее всего, обновление с Toad 12 до 13 также изменило версию клиента Oracle или настройки по умолчанию. Когда вы вызываете to_char()
дату и не указываете формат, Oracle использует настройки формата даты вашего клиента по умолчанию. Не видя вашей конкретной настройки, я предполагаю, что формат Toad 13 по умолчанию для дат отличается от Toad 12 и выдает строку длиной более 10 символов.
По моему опыту, лучше всегда указывать формат даты при вызове to_char()
, чтобы предотвратить любые странности, связанные с изменением настроек формата по умолчанию.
Комментарии:
1. Я тестировал с 100 и 1000 символами. Я получил тот же результат. Обе версии используют Oraclient12Home.
2. Определенно не то, что я ожидал услышать. Хотел бы я быть более полезным.
3. «Я получил тот же результат». Тем не менее, вы ВСЕГДА должны указывать маску формата при использовании to_char()
4. Аналогично, вы всегда должны указывать маску формата при использовании
TO_DATE
.5. @mikeinman Я смог воссоздать ошибку, но когда я увеличил размер
v_analyzed
до чрезвычайно большого размера (320000), он работал нормально. Я использую Toad v14.