グローバルの 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)
【ご参考】
マッピングしたグローバルがエクスポートできません
マッピングされたクラス・ルーチンをコンパイルする方法を教えてください
ディスカッション (0)0