我目前正在尝试将几千条记录从 MULTIKEYED 文件传输到一个平面 STRING 文件,即构建一个大型 SQL INSERT 语句以从我们的服务器 FILE 基础系统中取出数据以插入 SQL Server 进行测试。
我已经用一个非常相似的程序成功地完成了其他一些文件,但是这个一直产生错误 31 工作区溢出,我尝试缩短字符串的长度、数组和过滤文件,所以我只得到记录晚于 2012 年 2 月 15 日的日期
这是来自 BBx 的在线帮助中关于错误 31 的片段:
!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)