Я хотел бы использовать максимум 4000 символов для , помещенных в максимальное поле 4000 байтов (парадоксально, что 4000 байтов - это ограничение даже для введения в заблуждение полей VARCHAR2 (4000 CHAR) в Oracle 11).Как взять самую длинную строку, которая поместится в VARCHAR2 (4000) из NCLOB?
альтернативы я вижу, являются:
substr(NCLOB_COLUMN, 1, 4000)
- нет хороших, 4000 символов часто не может быть больше 4000 байтdbms_lob.substr(NCLOB_COLUMN, 4000, 1)
- нет хороших, 4000 символов часто не может быть больше 4000 байт (см также How to Copy Only First 4000 Characters from Oracle NCLOB to NVARCHAR2(4000) Value?)substr(NCLOB_COLUMN, 1, 1000)
- не хорошо, я обычно можно получить гораздо больше, чем 1000 символовsubstrb(NCLOB_COLUMN, 1, 4000)
- не подходит, генерирует ORA-22998 error
Другие идеи?
Как вы измените это для Oracle 11? Я считаю, что 32767 не будет работать. –
Я протестировал это в 11gR2. «Varchar2 (32767)» ОК в PL/SQL, и я всегда думал; это ограничение SQL, которое увеличилось с 4000 до 32k в 12c. Однако я использовал поддельные данные, заставляя многобайтовых символов вокруг знака 4k, чтобы убедиться, что он справился; тестирование с вашими реальными данными может что-то бросить. (И я уверен, что вы можете придумать лучшее имя для этой функции!) –