1

私は現在、MULTIKEYEDファイルからフラットなSTRINGファイルに数千のレコードを転送しようとしています。つまり、サーバーのFILEベースシステムからデータを取り出してテストのためにSQLServerに挿入する大きなSQLINSERTステートメントを作成しています。

非常によく似たプログラムを使用して他のいくつかのファイルでこれを正常に実行しましたが、これはエラー31ワークスペースオーバーフローを生成し続けます。文字列、配列の長さを短くし、ファイルをフィルタリングしようとしたため、次のレコードのみを取得します。 2012年2月15日より新しい日付

これは、エラー31に関するBBxのオンラインヘルプの抜粋です。

!ERROR = 31-ワークスペースのメモリオーバーフローBBj固有の情報については、BBjでの!ERRORの変更を参照してください。

ワークスペースのメモリが不足しています。START動詞を使用してより大きなワークスペースを割り当てると、このエラーを修正できます。

•大きな文字列または配列のディメンションを作成しようとしています。

•大きなプログラムをロードしようとしています。

•大きな文字列を操作しようとしています。

•大きなレコードの読み取りまたは書き込みを試みています。

•プログラムが使用可能なメモリより大きくなる原因となるプログラムを編集しようとしています。

•十分なメモリがある場合でも、プログラムを許可されているより長くしようとしています。

•コンパイルされた長さが256バイトを超えるコンソールモードコマンドを入力しようとしています。

私はこれらの条件のいずれも破っていないとかなり確信しています

何か案は?

0001 STRING "/u/x/scc/scott.sql"
0002 OPEN (1)"/u/x/scc/scott.sql"
0004 LET ARRAYLEN=27
0005 DIM A$[1:ARRAYLEN]
0010 OPEN (2)"V1OEMF"
0015 LET K$=""; READ (2,KEY=K$,DOM=0016)
0020 LET K$=KEY(2,END=15000)
0030 READ (2,KEY=K$)A$[ALL]
0035 FOR I=1 TO ARRAYLEN STEP 1; IF A$[I]="" THEN LET A$[I]=".."; NEXT I
0036 FOR I=1 TO ARRAYLEN STEP 1
0039 IF POS("'"=A$[I])<>0 THEN LET A$[I](POS("'"=A$[I]),1)=" "; GOTO 0039
0040 NEXT I
0050 IF A$[14]<"B20215" THEN GOTO 0020
0080 PRINT "INSERT INTO WMS.dbo.V1OEMF VALUES ('"+A$[1]+"','"+A$[2]+"','"+A$[4
0080:]+"','"+A$[5]+"','"+A$[6]+"','"+A$[7]+"','"+A$[8]+"','"+A$[9]+"','"+A$[12
0080:]+"','"+A$[14]+"','"+A$[25]+"','"+A$[27]+"');"
0100 GOTO 0020
15000 CLOSE (1); CLOSE (2)
4

2 に答える 2

1

Next I35行目を独自の行に移動すると、IFステートメントがfalseの場合は実行されません。

于 2012-03-12T18:57:45.247 に答える
0

私にとっては、必要な文字列ファイルをチャネル(1)に印刷する必要があります。あなたが今それを持っている方法は、それは単に画面に印刷し、メモリを本当に素早くいっぱいにするでしょう。80行目をPrint(1).....etc..に変更してみてください。

于 2012-03-13T16:35:43.607 に答える