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

У нас есть таблица в Oracle 11 г с varchar2 столбцом. Мы используем собственный язык программирования, где этот столбец определяется как строка. Максимум мы можем сохранить 2 000 символов (4 000 байтов) в этом столбце. Теперь требование таково, что столбец должен сохранить больше чем 2 000 символов (на самом деле неограниченные символы). DBAs не нравятся BLOB или ДЛИННЫЕ типы данных по причинам обслуживания.

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

Там какое-либо лучшее решение к этой проблеме?

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

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

12
задан user32262 7 June 2010 в 18:40
поделиться

6 ответов

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

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

12
ответ дан 2 December 2019 в 06:25
поделиться

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

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

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

Да, это не так эффективно, как blob, clob или LONG (я бы избегал полей LONG, если это вообще возможно). Да, это требует большего обслуживания, но если ваши DBA категорически против управления 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. Как insert, так и select. Строки PL/SQL VARCHAR могут содержать до 32K символов. Что может быть или не быть достаточно большим для ваших нужд.

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

7
ответ дан 2 December 2019 в 06:25
поделиться

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

1
ответ дан 2 December 2019 в 06:25
поделиться

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

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

1
ответ дан 2 December 2019 в 06:25
поделиться

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

2
ответ дан 2 December 2019 в 06:25
поделиться

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

1
ответ дан 2 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

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