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

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

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

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

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

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

12 голосов | спросил user32262 4 J0000006Europe/Moscow 2010, 20:48:59

5 ответов


0

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

Также вы можете посмотреть тип CLOB , который соответствует вашим потребностям. довольно хорошо.

ответил dkackman 4 J0000006Europe/Moscow 2010, 20:55:46
0

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

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

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

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

РЕДАКТИРОВАТЬ:

В 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 тыс. Символов. Который может или не может быть достаточно большим для ваших нужд.

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

ответил Thomas Jones-Low 5 J0000006Europe/Moscow 2010, 05:06:25
0

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

ответил Jeff 4 J0000006Europe/Moscow 2010, 20:52:34
0

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

ответил Mark Baker 4 J0000006Europe/Moscow 2010, 22:24:42
0

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

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

ответил Gary Myers 5 J0000006Europe/Moscow 2010, 04:50:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132