конечные пробелы в Oracle xmlserializer - PullRequest
0 голосов
/ 03 сентября 2018

Я использую XMLSerializer в oracle sqlplus-запросе для задания linux. На вкладке команды SQLDeveloper все выглядит нормально, но в Linux я вижу вывод xml, сопровождаемый пробелом:

${ORAPLUS} -s /@tns_entry <<_ORALINE
--WHENEVER OSERROR  EXIT 1
WHENEVER SQLERROR EXIT SQL.SQLCODE
SET TERM OFF
SET SHOW OFF
SET FEEDBACK OFF
SET HEADING OFF
SET HEAD OFF
SET PAGESIZE 0
set linesize 180
--set wrap on
set long 100000
SET LONGCHUNKSIZE 100000
SPOOL ${SPOOLFILE} APPEND
select xmlserialize(content xmlelement( "parent", xmlelement("child", 
       xmlelement("child-of-child", 'value'))) indent size=2) from dual;
SPOOL OFF
EXIT 0
_ORALINE

выход:

<parent>                                                                                                                                                                     
  <child>                                             How do I get rid of the spaces here?                                                                                                                    
    <child-of-child>value</child-of-child>                                                                                                                                   
  </child>                                                                                                                                                                   
</parent> 

Конечно, я могу запустить команду post-pretty-up, чтобы удалить завершающие пробелы, но это похоже на борьбу с симптомами.

1 Ответ

0 голосов
/ 03 сентября 2018

Это на самом деле не вызов XMLSerialize(), это поведение по умолчанию для буферных данных.

В вашем скрипте добавьте:

SET TRIMSPOOL ON

Из документации по SQL * Plus :

SET TRIMS [POOL] {ON | OFF}

Определяет, будет ли SQL * Plus ставить конечные пробелы в конце каждой буферной строки. ON удаляет пробелы в конце каждой строки. OFF позволяет SQL * Plus включать конечные пробелы.

Для интерактивных сессий существует эквивалент SET TEIMOUT ON, который полезен, если вы перенаправляете вывод вместо того, чтобы спулировать его.

...