作者

Sales Engineer at Intersystems
文章 Jeff Liu · 3 hr 前 1m read

<SLMSPAN> 全局删除时出现错误的原因和解决方法

InterSystems 常见问题

如果您尝试从顶级节点删除在子脚本级别映射的全局变量,您将收到一个<SLMSPAN>错误,并且它不会被删除。这是因为用于子脚本级别映射全局变量的kill命令不能跨映射使用。

// Suppose subscript-mapped globals exist in different databases, as shown below:
^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B

// Trying to kill from the top level will result in a <SLMSPAN> error.
NAMESPACE>Kill ^TEST
<SLMSPAN> <- This error is output.

要只删除当前命名空间(数据库)中的全局,请使用以下命令:

NAMESPACE>Kill ^["^^."]TEST

在子脚本级别映射的全局变量必须移动到数据库并直接删除。

要切换到数据库,请使用以下命令:

zn "^^c:\intersystems\iris\mgr\user"
or
set $namespace="^^c:\intersystems\iris\mgr\user"

使用 $System.OBJ.Load 导入全局时,默认行为是在导入之前删除全局变量。因此,如果目标全局变量是子脚本级别映射的,则会发生<SLMSPAN>错误。在这种情况下,指定/mergeglobal标志作为system.OBJ.Load的第二个参数以防止预先删除,如下所示:

Set sc = $System.OBJ.Load(path," /mergeglobal",.errors)

enlightened [参考资料]
无法导出映射全局。
如何编译映射的类和例程?