进度警告:在过程中超出 -s 堆栈。那是啥意思?
Posted
技术标签:
【中文标题】进度警告:在过程中超出 -s 堆栈。那是啥意思?【英文标题】:Progress Warning: -s stack exceeded during procedure. What does that mean?进度警告:在过程中超出 -s 堆栈。那是什么意思? 【发布时间】:2021-12-23 22:46:30 【问题描述】:我遇到了以前从未见过的警告。
这是我在运行简单程序时收到的消息:
我的程序如下:
-
从文件中读取
ReferenceNumbers
在for each
中使用那些ReferenceNumbers
更改Info
字段的值
这是它在代码中的样子:
INPUT FROM VALUE('C:\Users\admin\Desktop\ref\reference.csv').
DEFINE VARIABLE cData AS CHARACTER NO-UNDO.
repeat:
if keyfunction(lastkey) = "end-error" then leave.
process events.
import unformatted cData.
FOR EACH V_Acct
WHERE V_Acct.Company = '123'
AND V_Acct.ReceiptType = 'U'
AND V_Acct.ReferenceNr = integer(TRIM(ENTRY(1,cData,';')))
AND V_Acct.xInfo = ''
EXCLUSIVE-LOCK:
V_Acct.xInfo = 'VGF00000000000000'.
END. /* for each V_Acct */
END. /* repeat */
从文件中正确读取参考编号(多次确认)。 我过去也更改过同一个数据库表的某些文件,但从未遇到过此错误消息。
有人可以帮我吗?
【问题讨论】:
【参考方案1】:一个常见的原因是尝试使用长字符变量。 IOW 你可能试图 IMPORT 很长的一行。
https://knowledgebase.progress.com/articles/Article/P79111
-s 并不特定于单个变量(字符变量的限制为 30,000 字节),而是涉及堆栈空间的多种不同用途。所以可能只是因为其他原因你接近了极限,这把你推到了边缘。
-s 的默认值会随时间变化,具体取决于您使用的 OpenEdge 版本,您的应用程序或特定会话也可能设置了更高或更低的非默认值。如果生成了一个 protrace 文件,它会告诉您问题发生时有效的 -s 值。
查找一个名为 protrace.###(其中 ### 是您的进程 ID)的文件,其时间戳与错误相同。这可能在当前工作目录或应用程序的 WRKDIR 中。
【讨论】:
以上是关于进度警告:在过程中超出 -s 堆栈。那是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章