11

次のようなスクリプトがあります。

SET ECHO OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET HEADING OFF
SET TERMOUT OFF
SET TRIMOUT ON
SET TRIMSPOOL ON
SET WRAP OFF
SET LINESIZE 32000
SET LONG 32000
SET LONGCHUNKSIZE 32000
SET SERVEROUT ON

SPOOL C:\Export.txt

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....)))
  FROM --TABLENAME--
 WHERE --CONDITIONS--

出力は複雑な xml を含む行のリストを含むファイルである必要がありますが、生成された XML の長さが 2000 を超える場合、SQLPlus は 2000 にトリムして次の行に移動します。

SQLPlus にすべてのデータを同じ行に強制的に書き込む方法はありますか?

4

3 に答える 3

9

SET コマンドの直後に次の行を追加するだけです。

COL ColumnName FORMAT A32000

ここで、ColumnName は SELECT ステートメントの XML 列のエイリアスです (エイリアスを追加する必要があります)。

これにより、その列の最大幅が設定されます。デフォルトでは 2000 文字です。COL FORMAT は 60000 文字まで設定できますが、実際に sqlplus を使用して 1 行で取得できる最大値は32767であることに注意してください。これが LINESIZE の上限であるためです。

于 2011-04-27T01:26:53.937 に答える
2

Windows を使用していますか? 私はこれと同じ問題を抱えていましたが、他の2つの回答はどちらも役に立ちませんでした(直接、もう1つやらなければなりませんでした)。SQL*Plus for Windows のセットアップに関するこの記事のアドバイスに従って、著者は次のように述べています。

[注 3]Set long big_numberそのため、複雑なトリガーやビューの定義、または長い列や clob 列のテキストを確認できます。

私はSET LONG 32000(私の最長の行は2000文字強でした)と設定し、それで問題は解決しました。

于 2011-11-04T19:35:49.760 に答える
1

getClobVal() を使用して出力を clob に変換するのはどうですか?

SELECT XMLELEMENT("element1",xmlelement("element2",xmlattributes(.....))).getClobVal()
  FROM --TABLENAME--
 WHERE --CONDITIONS--
于 2010-12-06T06:01:33.457 に答える