powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
16 сообщений из 16, страница 1 из 1
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063142
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Oracle 19, пытаюсь сделать поле с типом varchar2 (8000)
но получаю ошибку, которая предлагает опять же использовать varchar2 :)

авторORA-00910: заданная длина слишком велика для этого типа данных
00910. 00000 - "specified length too long for its datatype"
*Cause: for datatypes CHAR and RAW, the length specified was > 2000;
otherwise, the length specified was > 4000.
*Action: use a shorter length or switch to a datatype permitting a
longer length such as a VARCHAR2, LONG CHAR, or LONG RAW

и тип поля LONG CHAR (8000) тоже не воспринимает

ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR
тоже не помогло
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063148
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ведь в Оракле 19 максимальная длина для VARCHAR2(32767)
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063154
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063157
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга Семенова
ведь в Оракле 19 максимальная длина для VARCHAR2(32767)


Если открытъ документацию, а именно Datatype Limits то можно прочесть следующее:
Maximum size: 4000 bytes, or 32767 bytes if the MAX_STRING_SIZE initialization parameter is set to EXTENDED.
See Also: "MAX_STRING_SIZE" initialization parameter for additional details

И обязательно прочтите о параметре MAX_STRING_SIZE
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063161
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга Семенова
ведь в Оракле 19 максимальная длина для VARCHAR2(32767)
Подозреваю, вы путаете SQL и PL/SQL datatypes. Они, вообще говоря, разные.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063163
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Подозреваю, вы путаете SQL и PL/SQL datatypes. Они, вообще говоря, разные.
Ты просто немного не в теме.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063165
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic, я-то в теме.

Но при первичном знакомстве с Oracle я споткнулся именно на этом, поэтому поделился опытом, поскольку похоже, что ТС тоже только знакомится.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063174
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И обязательно прочтите о параметре MAX_STRING_SIZE и туда глянь, так, на всякий)
you cannot change the value of MAX_STRING_SIZE from EXTENDED to STANDARD.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063249
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Ольга Семенова
ведь в Оракле 19 максимальная длина для VARCHAR2(32767)
Подозреваю, вы путаете SQL и PL/SQL datatypes. Они, вообще говоря, разные.


т.е. изменение в EXTENDED не поможет ? ведь мне нужно именно для SQL (DDL)

и есть ли альтернатива увеличения размера текстового поля до 8000 символов и чтобы свойства поля и применяемые к нему функции (substr, length, instr) остались как и для текущего типа varchar2. Чтобы не поломать прикладной функционал, который работает с этим текстовым полем
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063257
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. изменение в EXTENDED не поможет ? ведь мне нужно именно для SQL (DDL)

Поможет.

Вам уже подсказали, что это необратимое изменение, поэтому проверьте сначала на тестовой БД.

И, насколько я помню свое мимолетное знакомство с этим нововведением, кажется, в 12-й версии, это фактически скрытый CLOB, так что контролируйте рост LOB-сегментов.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063258
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm
т.е. изменение в EXTENDED не поможет ? ведь мне нужно именно для SQL (DDL)
Поможет.Это палка о двух концах:
RTFMBy setting MAX_STRING_SIZE = EXTENDED, users are taking an explicit action that could introduce application incompatibility in their database. Applications that do not want to use the expanded data types can be rewritten for compatibility with either setting; for example, these applications could use explicit CASTs to fix the length of VARCHAR2 expressions during CREATE TABLE AS SELECT.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063356
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга Семенова
и есть ли альтернатива увеличения размера текстового поля до 8000 символов и чтобы свойства поля и применяемые к нему функции (substr, length, instr) остались как и для текущего типа varchar2. Чтобы не поломать прикладной функционал, который работает с этим текстовым полем

1. Ограничение длины текстового поля не в символах, а в байтах. Поэтому количество символов, которые поместятся в 4000 байтов (или 32767 байтов) зависит от используемого CHARSET и от самих символов (если чарсет с переменной длиной символов).
2. Перечисленные функции работают с разными типами данных: string can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB. Подробности и ограничения - в справке по конкретной функции.

Насчёт альтернативы и целостности прикладного функционала.
Не знаю, почему появилась идея расширения полей. Но для полей такой длины обычно характерна внутренняя неструктурированность (типа большого примечания) или же наоборот - жесткая структура (откуда и применение упомянутых выше функций).
Поэтому рекомендую для начала разобраться, действительно ли нужно расширять поле. Если внутренней структуры нет, лучше добавить ещё N полей типа "примечание2", "примечание3", чем всё тулить в одно поле.
Если есть структура и она просто выросла, до имеет смысл преобразовать поле в CLOB. Такие поля (со структурой) обычно пользователю на прямое редактирование не даются, а исправить функционал в коде выгоднее, чем пытаться обойтись "малой кровью". Такие попытки обычно в перспективе обходятся дороже.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063526
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Ольга Семенова
и есть ли альтернатива увеличения размера текстового поля до 8000 символов и чтобы свойства поля и применяемые к нему функции (substr, length, instr) остались как и для текущего типа varchar2. Чтобы не поломать прикладной функционал, который работает с этим текстовым полем

1. Ограничение длины текстового поля не в символах, а в байтах. Поэтому количество символов, которые поместятся в 4000 байтов (или 32767 байтов) зависит от используемого CHARSET и от самих символов (если чарсет с переменной длиной символов).
2. Перечисленные функции работают с разными типами данных: string can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB.
Подробности и ограничения - в справке по конкретной функции.

Насчёт альтернативы и целостности прикладного функционала.
Не знаю, почему появилась идея расширения полей. Но для полей такой длины обычно характерна внутренняя неструктурированность (типа большого примечания) или же наоборот - жесткая структура (откуда и применение упомянутых выше функций).
Поэтому рекомендую для начала разобраться, действительно ли нужно расширять поле. Если внутренней структуры нет, лучше добавить ещё N полей типа "примечание2", "примечание3", чем всё тулить в одно поле.
Если есть структура и она просто выросла, до имеет смысл преобразовать поле в CLOB. Такие поля (со структурой) обычно пользователю на прямое редактирование не даются, а исправить функционал в коде выгоднее, чем пытаться обойтись "малой кровью". Такие попытки обычно в перспективе обходятся дороже.

в настоящее время полях с varchar2 размерностью 4000 хранится описание действий пользователя (сделанные автоматически через триггеры, что-то вроде "пользователь Иванов вошел в систему...") или длинные описания сделанные/добавленные самим пользователем на уровне прикладного приложения
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063561
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга Семенова
в настоящее время полях с varchar2 размерностью 4000 хранится описание действий пользователя (сделанные автоматически через триггеры, что-то вроде "пользователь Иванов вошел в систему...") или длинные описания сделанные/добавленные самим пользователем на уровне прикладного приложения
Хм...
У нас это делается просто через записи в таблицу... с указанием времени, и другими параметрами...
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40063626
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ольга Семенова
хранится описание действий пользователя (сделанные автоматически через триггеры, что-то вроде "пользователь Иванов вошел в систему...") или длинные описания сделанные/добавленные самим пользователем на уровне прикладного приложения

Самый бредовыйтяжёлый вариант - структурированные и неструктурированные данные в одном поле.
Настоятельно рекомендую их разнести. Пользовательское описание (это что вообще такое? - отчёт пользователя о проделанной работе?) спокойно можно в CLOB. А триггерные порождения (если почему-то нет возможности использовать вместо них встроенный аудит) - в отдельную таблицу, можно тоже в CLOB. Лучше в отдельный TABLESPACE на отдельный диск, ибо быстро пухнет.
...
Рейтинг: 0 / 0
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
    #40064028
Ольга Семенова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на сколько вырастет tablespace если я сменю varchar2(4000) на CLOB? Таких полей около 10, а записей порядка 1,5 миллиарда
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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