記事
· 2023年5月15日 2m read

グローバルの kill で <SLMSPAN> エラーとなる原因と対処方法

これは InterSystems FAQ サイトの記事です。

サブスクリプトレベルマッピングされたグローバルを、トップノードから全体をkillする場合、<SLMSPAN>エラーとなり削除ができません。

これは、サブスクリプトレベルマッピングされたグローバルについては、マッピングを跨いだサブスクリプト範囲の kill コマンドは行えないためです。

// 以下のように、別々のデータベースにサブスクリプトマッピンググローバルが存在する場合:
^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B

// Topレベルから Kill しようとすると、<SLMSPAN>エラーとなる
NAMESPACE>Kill ^TEST
<SLMSPAN> <- このエラーが出力


現ネームスペース(データベース)のグローバルのみ削除するには、次のように指定して下さい。

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

サブスクリプトレベルでマッピングしているグローバルは、データベースに移動して直接Killする必要があります。
データベースに移動する場合は以下のようにします。

zn "^^c:\intersystems\iris\mgr\user"
または
set $namespace="^^c:\intersystems\iris\mgr\user"


$system.OBJ.Load でグローバルをインポートする場合は、既定の動作では、インポート対象のグローバルを実施前に kill します。
そのため、対象のグローバルが、サブスクリプトレベルマッピングされている場合、<SLMSPAN>エラーになってしまいます。
この場合は、以下のように $system.OBJ.Loadの第二引数に/mergeglobal のフラグを指定して、事前のkill を行わないようにします。

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


enlightened【ご参考】
マッピングしたグローバルがエクスポートできません
マッピングされたクラス・ルーチンをコンパイルする方法を教えてください

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください