web-dev-qa-db-ja.com

Oracleスプールからファイルへの最大列幅

私はこのようなスクリプトを持っています:

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にすべてのデータを同じ行に書き込むように強制する方法はありますか?

10
gabriele.lb

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

COL ColumnName FORMAT A32000

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

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

6
MTS

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

[note3] Set long big_numberこれにより、複雑なトリガーまたはビューの定義、または任意の長い列またはclob列のテキストを確認できます。

私は自分の名前をSET LONG 32000(私の最長行は2000文字強)に設定しましたが、これで問題は解決しました。

2
technomalogical

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

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