SQLPlus удаляет конечные пробелы в поле clob при вставке

Я использую SQL Plus 11.1.0.6.0 для запуска сценария, который выполняет пакетную вставку в базу данных Oracle 10g. Проблема, которую я заметил, заключается в том, что при вставке некоторой строки кода в поле clob есть несколько строк с пробелами в конце, например:

....public void myMethod().... --trailing space here
....{
........int myVar = 1;
........ -- empty line with trailing spaces
........myVar+=1
....}

Строка, которая вставляется в таблицу, теряет эти пустые конечные пробелы в пустых строках и становится:

....public void myMethod() --trailing space is lost
....{
........int myVar = 1;
-- empty line without trailing spaces
........myVar+=1
....}

Хотя это не имеет значения для полезных данных, это довольно неприятно, потому что приводит к тому, что данные отличаются от оригинала и не проходят некоторые тесты.

Все, что я смог найти, это SET TRIMSPOOL/TRIMOUT OFF, что ничего не меняет, есть ли у кого-нибудь другие идеи?


person Community    schedule 14.10.2009    source источник
comment
Можете ли вы опубликовать сценарий, который вы используете?   -  person David Aldridge    schedule 14.10.2009


Ответы (3)


Без публикации сценария трудно быть уверенным, но вам, вероятно, не следует вставлять текстовые строки непосредственно в CLOB в SQLPlus. Если бы вы использовали процесс PL/SQL, который извлекал ваш текст из файла и вызывал PL/SQL из SQL, плюс он должен сохранить все форматирование.

Но это может быть всемогущий PITA. Но это хорошо описано в текстах O'Reilly PL/SQL.

person user98960    schedule 21.10.2009

В конце концов я решил это с помощью такого взлома (учитывая оригинальный пример):

declare
myLargeValue_2 clob;
begin
myLargeValue_2 := '....public void myMethod()'||'....
'||'....{
........int myVar = 1;
'||'........' -- empty line with trailing spaces

and so on

В основном явно объединены все пробелы

person Community    schedule 22.10.2009

Вы можете попробовать включить следующий параметр:

SET SQLBLANKLINES ON
person Rusty    schedule 19.09.2014