Вставка операторов из файла .sql в базу данных Oracle, в результате ORA-01704: слишком длинный строковый литерал - PullRequest
4 голосов
/ 25 февраля 2012

Я экспортировал некоторые данные из моей таблицы базы данных в файл sql в виде операторов вставки. Теперь я хочу их запустить, но получаю ошибку ORA-01704: слишком длинный строковый литерал. Причиной проблемы является один столбец CLOB, в котором данные XML содержат более 4000 символов.

Какой лучший обходной путь? У меня в этом файле около 50 операторов вставки SQL.

Ответы [ 4 ]

2 голосов
/ 25 февраля 2012

Вместо использования операторов вставки вы можете оставить данные в файле с разделителями и посмотреть на использование либо SQLLDR , либо внешних таблиц .Внешние столы потрясающие.

1 голос
/ 25 февраля 2012

Чтобы получить что-то больше 4000 байтов, используйте pl \ sql, который поддерживает до 32767 байтов.Вот пример того, как решить ORA-01704: ошибка строкового литерала: слишком длинная:

declare
vClobVal varchar2(32767) := '<Add text string here>';
begin
update CLOBTAB set CLOBCOL = vClobVal;
end;

вы также можете изменить тип колонки с varchar2 на CLOB

, также посмотрите, если эта ссылкамогу вам помочь - http://www.dba -oracle.com / t_ora_01704_string_literal_too_long.htm

0 голосов
/ 12 апреля 2013

Вы можете попробовать это, у меня это сработало:

DECLARE 
big_text_  CLOB := 'very very very very long text or XML.......';
BEGIN
  INSERT INTO table_name (column1, column2, column3_CLOB) VALUES ('value1', 'value2', big_text_);
  COMMIT;
END;
0 голосов
/ 25 февраля 2012

Просто мысль для этого конкретного столбца, вы должны иметь разделенные столбцы.Например, скажем, у вас текущий столбец RANDOM_TEXT, так как VARCHAR (4000) превышает лимит, вы можете разделить его на 2 столбца, например RANDOM_TEXT_1 и RANDOM_TEXT_2, когда вы пишете, вы должны взять первые 4000 символов в первом RANDOM_TEXT_1, а оставшиеся - в RANDOM_TEXT_2,Когда вы отдаете это обратно любому приложению или любому API, вы должны объединить и передать в виде одной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...