Выдает следующий запрос:
select dump(tz_offset(tzname)) from v$timezone_names;
Вы получаете результаты, подобные этим:
Typ=1 Len=7: 43,48,49,58,48,48,0
Typ=1 Len=7: 43,48,49,58,48,48,0
Typ=1 Len=7: 43,48,49,58,48,48,0
Typ=1 Len=7: 43,48,49,58,48,48,0
Typ=1 Len=7: 43,48,49,58,48,48,0
Typ=1 Len=7: 43,48,49,58,48,48,0
...
Это показывает, что tz_offset()
возвращает строки с нулевым символом в конце (возможно, ошибка). Так что по вашему запросу Oracle возвращает
"Africa/Algiers (UTC+01:00\0)" // Note \0 -> null character
"Africa/Cairo (UTC+03:00\0)" // Note \0 -> null character
...
Имея это в виду, я предполагаю, что PL / SQL Developer интерпретирует \ 0 как конец строки (может быть, еще одна ошибка, строки SQL не заканчиваются нулем), и поэтому он не мешает писать остальную часть строки, так что вы теряете завершающую скобку. SQL * PLus выбирает вместо этого пустое пространство вместо этого нулевого значения, а затем переходит к остальной части строки, печатая закрывающую скобку.
В качестве обходного пути вы можете заменить tz_offset(...)
на replace(tz_offset(...), chr(0))
. Это удалит нули из того, что tz_offset(...)
возвращает.