2 Replies Latest reply: Oct 24, 2012 10:48 PM by 967657 RSS

    sqlplusのSQL結果に空白行が入ってしまう

    967657
      シェルスクリプトからSQLを実行して
      その結果をXMLで取り出すときの質問です。

      環境 
      Oracle10.1

      結果をXMLに出力することは問題なくできたのですが
      空白行が予期せぬ場所に挿入されてしまいます。

      下記がSQL文です。

      SET SERVEROUTPUT ON
      SET PAGESIZE 0
      set long 100000
      set feedback off
      set echo off
      set linesize 1000

      DECLARE
      qryCtx DBMS_XMLGEN.ctxHandle;
      result CLOB;

      BEGIN
      qryCtx := dbms_xmlgen.newContext('select TEST1,to_char(DATETIME,''mm/dd hh24:mi'') ,TEST2,TEST3,TEST4
      from TEST_TABLE A );
      dbms_xmlgen.setRowTag(qryCtx,'ECONOMICDATA');
      dbms_xmlgen.setRowSetTag(qryCtx,'ECONOMICLIST');
      result := DBMS_XMLGEN.getXML(qryCtx);
      INSERT INTO temp_clob_tab VALUES(result);
      DBMS_XMLGEN.closeContext(qryCtx);
      END;
      /
      SELECT * FROM temp_clob_tab;
      exit;

      結果XMLです
      <?xml version="1.0"?>
      <ECONOMICLIST>
      <ECONOMICDATA>
      <TEST1>データ1</TEST1>
      <DATETIME>10/09 00:01</DATETIME>
      <TEST2>データ2</TEST2>
      <TEST3>データ3</TEST3>
      <TEST4>データ4</TEST4>
      </ECONOMICDATA>
      <ECONOMICLIST>
      ~(省略)

      <TEST1>データ1</TEST1>
      <DATETIME>10/09 00:01
      </DATETIME>
      <TEST2>データ2</TEST2>
      <TEST3>データ3</TEST3>
      <TEST4>データ4</TEST4>
      </ECONOMICDATA>
      <ECONOMICLIST>


      CLOB型は4Gまで入るはずなのに
      2000バイトちょっとで空白行が入ってしまいます。
      set longやset linesizeを試してみたんですけど
      解消されません。
      ご教授お願いいたします。m(_ _)m
        • 1. Re: sqlplusのSQL結果に空白行が入ってしまう
          hamadeguchi
          2000というとBUFFER思い浮かびますが
          http://www.shift-the-oracle.com/sqlplus/system-variable/serveroutput.html
          DBMS_OUTPUTは使用していないんですよね

          テーブルには正しく格納されていますか?
          SPOOLでの出力ですか?
          • 2. Re: sqlplusのSQL結果に空白行が入ってしまう
            967657
            ご回答ありがとうございます。

            DBMS_OUTPUTは使用していません。

            >テーブルには正しく格納されていますか?
            temp_clob_tabテーブルの中を確認したところ
            正しく登録されていました。(空白行は入ってませんでした)

            >SPOOLでの出力ですか?
            SPOOLではなく下記方法です。
            sqlplus -s user/pass@db @test.sql << EOF > test.xml

            sqlplusで出力したときだけ空白行が入ってしまうようです・・・