コンテキスト
SQL * Plusを使用して長い行(8,000文字を超える)を含むダンプを取得しようとすると、エラーが発生しますSP2-0027: Input is too long (> 2499 characters)
。これはハードコードされた制限であるため、克服することはできません。
予想されるソリューション
,
最後の(カンマ)文字の予想幅よりも長いbashと分割行で入力をストリーミングしたいと思います。
だから私は次のようなものが必要です
cat my_dump.sql | *magic_command* | sqlplus system/oracle@xe
詳細
- 最新バージョンでは、最大4999文字まで行を収容できることがわかっていますが、まだ行が長くなります(
grep '.\{5000\}' my_dump.sql | wc -l
)。 - ダンプを手動で更新することは実際には可能ではありません。
- 私は試してみましたが、
tr
これは私が望んでいないすべての行を分割します fmt
試してみましたが、fold
カスタム区切り文字を使用することは不可能なようです。- 現在見ていますが、「2500文字を超えると、最初の2500文字以内で最後の一致を探します」
sed
の正規表現が見つからないようです。,
答え1
次のようにしてみてください。
sed -re '/.{2500}/ s/.{,2500},/&\n/g'
説明する:
/.{2500}/
行に2,500文字(またはそれ以上)が含まれている場合...s/.{,2500},/&\n/g
最大2,500文字を変更して,
改行を追加してください。
これが代替不可能な「、」を置き換えても驚かないでしょう。
答え2
私は次のawkコマンドが動作すると想像しています:
awk 'length > 2499 {gsub(/.{0,2498},/, "&\n")} 1'
正規表現は、カンマの前に最大2498文字(つまり、カンマを含む2499文字)を許可し、その後に改行文字を挿入します。 (エラーメッセージに対応する番号が記載されているため、2499を使用しました。)