Подтвердить что ты не робот

Как хранить неограниченные символы в Oracle 11g?

У нас есть таблица в Oracle 11g с столбцом varchar2. Мы используем проприетарный язык программирования, где этот столбец определяется как строка. Максимально мы можем хранить 2000 символов (4000 байт) в этом столбце. Теперь требование таково, что в столбце должно храниться более 2000 символов (на самом деле неограниченное количество символов). Администраторы баз данных не любят BLOB или LONG типы данных по причинам обслуживания.

Решение, о котором я могу думать, состоит в том, чтобы удалить этот столбец из исходной таблицы и иметь отдельную таблицу для этого столбца, а затем сохранить каждый символ в строке, чтобы получить неограниченные символы. Эта строка будет соединена с исходной таблицей для запросов.

Есть ли лучшее решение этой проблемы?

ОБНОВЛЕНИЕ: проприетарный язык программирования позволяет определять переменные типа string и blob, нет опции CLOB. Я понимаю ответы, но я не могу взять на себя администраторов баз данных. Я понимаю, что отклонение от BLOB или LONG станет кошмаром разработчиков, но все равно не сможет помочь.

ОБНОВЛЕНИЕ 2: Если мне нужно максимум 8000 символов, могу ли я добавить еще 3 столбца, чтобы у меня было 4 столбца с 2000 char для получения 8000 символов. Поэтому, когда первый столбец заполнен, значения будут разлиты в следующий столбец и так далее. Будет ли этот дизайн иметь какие-либо плохие побочные эффекты? Пожалуйста, предложите.

4b9b3361

Ответ 1

Если blob - это то, что вам нужно, убедите свой dba в том, что вам нужно. Эти типы данных существуют по какой-то причине, и любая сворачивание вашей собственной реализации будет хуже, чем встроенный тип.

Также вы можете посмотреть тип

Ответ 2

Вы можете следить за тем, как Oracle хранит свои хранимые процедуры в информационной схеме. Определите таблицу, называемую текстовыми столбцами:

CREATE TABLE MY_TEXT (
IDENTIFIER INT, 
LINE       INT,
TEXT       VARCHAR2 (4000),
PRIMARY KEY (INDENTIFIER, LINE));

Столбец идентификатора - это внешний ключ к исходной таблице. Строка - это простое целое (не последовательность), чтобы сохранить текстовые поля в порядке. Это позволяет хранить большие куски данных

Да, это не так эффективно, как blob, clob или LONG (я бы избегал LONG-полей, если это вообще возможно). Да, это требует большего удобства, buf, если ваши администраторы баз данных мертвы, настроенные против управления полями CLOB в базе данных, это вариант второй.

EDIT:

My_Table ниже, где у вас в настоящее время есть столбец VARCHAR, который вы хотите развернуть. Я бы сохранил его в таблице для коротких текстовых полей.

CREATE TABLE MY_TABLE (
INDENTIFER INT,
OTHER_FIELD VARCHAR2(10),
REQUIRED_TEXT VARCHAR(4000),
PRIMERY KEY (IDENTFIER));

Затем напишите запрос, чтобы потянуть данные, соединяющие две таблицы, упорядочивая LINE в поле MY_TEXT. Вашему приложению потребуется разбить строку на 2000 символов и вставить их в строку.

Я бы сделал это в PL/SQL-процедуре. Оба вставляются и выбираются. Строки PL/SQL VARCHAR могут содержать до 32 тыс. Символов. Что может быть или не быть достаточно большим для ваших нужд.

Но, как и любой другой человек, отвечающий на этот вопрос, я настоятельно рекомендую сделать дело DBA, чтобы сделать столбец CLOB. С точки зрения программы это будет BLOB и поэтому прост в управлении.

Ответ 3

Вы сказали, что нет BLOB или LONG... но как насчет CLOB? 4GB символьные данные.

Ответ 4

BLOB - лучшее решение. Все остальное будет менее удобным и большим беспокойством по обслуживанию.

Ответ 5

Является ли BFILE жизнеспособным альтернативным типом данных для ваших администраторов баз данных?

Ответ 6

Я не понимаю. CLOB является соответствующим типом данных базы данных. Если ваш странный язык программирования будет обрабатывать строки из 8000 (или любых других) символов, что мешает ему записывать их в CLOB.

В частности, какая ошибка вы получаете (от Oracle или вашего языка программирования), когда пытаетесь вставить строку из 8000 символов в столбец, определенный как CLOB.