Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли на Oracle 19 сделать текстовое поле длиной более 4000 / 16 сообщений из 16, страница 1 из 1
16.04.2021, 18:10
    #40063142
Ольга Семенова
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Всем привет.
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
16.04.2021, 18:26
    #40063148
Ольга Семенова
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
ведь в Оракле 19 максимальная длина для VARCHAR2(32767)
...
Рейтинг: 0 / 0
16.04.2021, 18:49
    #40063154
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
...
Рейтинг: 0 / 0
16.04.2021, 18:54
    #40063157
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Ольга Семенова
ведь в Оракле 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
16.04.2021, 18:59
    #40063161
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Ольга Семенова
ведь в Оракле 19 максимальная длина для VARCHAR2(32767)
Подозреваю, вы путаете SQL и PL/SQL datatypes. Они, вообще говоря, разные.
...
Рейтинг: 0 / 0
16.04.2021, 19:07
    #40063163
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Правильный Вася
Подозреваю, вы путаете SQL и PL/SQL datatypes. Они, вообще говоря, разные.
Ты просто немного не в теме.
...
Рейтинг: 0 / 0
16.04.2021, 19:22
    #40063165
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Elic, я-то в теме.

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


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

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

Поможет.

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

И, насколько я помню свое мимолетное знакомство с этим нововведением, кажется, в 12-й версии, это фактически скрытый CLOB, так что контролируйте рост LOB-сегментов.
...
Рейтинг: 0 / 0
17.04.2021, 11:04
    #40063258
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
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
17.04.2021, 17:15
    #40063356
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Ольга Семенова
и есть ли альтернатива увеличения размера текстового поля до 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
18.04.2021, 09:49
    #40063526
Ольга Семенова
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Правильный Вася
Ольга Семенова
и есть ли альтернатива увеличения размера текстового поля до 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
18.04.2021, 13:17
    #40063561
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Ольга Семенова
в настоящее время полях с varchar2 размерностью 4000 хранится описание действий пользователя (сделанные автоматически через триггеры, что-то вроде "пользователь Иванов вошел в систему...") или длинные описания сделанные/добавленные самим пользователем на уровне прикладного приложения
Хм...
У нас это делается просто через записи в таблицу... с указанием времени, и другими параметрами...
...
Рейтинг: 0 / 0
18.04.2021, 20:53
    #40063626
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли на Oracle 19 сделать текстовое поле длиной более 4000
Ольга Семенова
хранится описание действий пользователя (сделанные автоматически через триггеры, что-то вроде "пользователь Иванов вошел в систему...") или длинные описания сделанные/добавленные самим пользователем на уровне прикладного приложения

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


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