Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ZSAVE

現在のルーチンを保存します。

Synopsis

ZSAVE:pc routine
ZS:pc routine

引数

pc オプション — 後置条件式
routine オプション — ルーチンの新しい名前。(有効な識別子である必要があります。)

概要

ZSAVE は、現在のルーチンを保存します。ZLOAD を使用してルーチンをロードします。次に、ZSAVE を使用して、ZINSERT コマンドおよび ZREMOVE コマンドでルーチンに加えた変更を保存します。ZSAVE は、引数なしの ZLOAD でロードされるルーチン、または ZINSERT コマンドで作成される名前のないルーチンの命名にも使用されます。

Caution:

ZSAVE で、編集ポインタをルーチンの末尾に移動します。実際には保存の必要がなかった場合でも、ZSAVE の発行により編集ポインタは移動します。

ZLOAD を使用してルーチンをロードし、そのルーチンに変更を加えずに、同じルーチン名で ZSAVE を使用して保存した場合、Caché はそのルーチンのタイムスタンプや生成されたフラグを更新しません。

ZSAVE は、ターミナル・プロンプトから使用するか、またはプログラム内で XECUTE コマンドによって呼び出すことで使用できます。

ZSAVE には、以下の 2 つの形式があります。

  • 引数なし

  • 引数付き

引数なしの ZSAVE は、現在のルーチンを、現在の名前 (つまり、ユーザが前回ルーチンを保存したときの名前) で現在のネームスペース内のディスクに保存します。現在のルーチンにまだ名前がない場合、引数なしの ZSAVE は <COMMAND> エラーを生成します。

ZSAVE routine は、現在のルーチンを、指定された routine 名で現在のネームスペース内のディスクに保存します。

XECUTE コマンドを使用して ZSAVE routine を呼び出す場合、システムは、Load フレームを作成して現在のルーチンを保持します。XECUTE コマンドが終了すると、Caché は、この Load フレームを使用して、現在のルーチンとして、XECUTE の前にルーチン名を リストアします。詳細は、以下の例を参照してください。

   WRITE "Current routine name",!
   WRITE "initial name: ",$ZNAME,!
     SET x = "WRITE $ZNAME"
     SET y = "ZSAVE mytest"
     SET z = "WRITE "" changed to "",$ZNAME,!"
   XECUTE x,y,z
   WRITE "restored name: ",$ZNAME,! 

引数

pc

オプションの後置条件式。Caché は、後置条件式が True (0 以外の数値に評価される) の場合にこのコマンドを実行します。Caché は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"Caché ObjectScript の使用法" の "コマンド後置条件式" を参照してください。

routine

ルーチンを保存する名前。routine は有効なルーチン名である必要があります。$ZNAME("string",1) 関数を使用すると、string が有効なルーチン名かどうかを判定できます。$ZNAME 特殊変数で、現在ロードされているルーチンの名前を判別できます。

通常、routine はルーチンの新しい名前ですが、現在のルーチン名にすることもできます。その名前によるルーチンが既に存在する場合、Caché はそれを上書きします。上書きするときに、Caché からの確認はないことに注意してください。ルーチン名の最初の 255 文字以内は一意である必要があります。220 文字を超える長さのルーチン名は避けてください。

ZSAVE routine を X で指定する場合、

routine を省略すると、システムは現在の名前でルーチンを保存します。現在の名前が存在しない場合、ZSAVE は <COMMAND> エラーを生成します。

以下のターミナル・セッションの例は、ZSAVE コマンドを実行して、現在ロードされているルーチンを保存します。

USER>DO ^myroutine
this is line 8
this is line 9
USER>ZLOAD myroutine

USER>PRINT +8
WRITE "this is line 8",!
USER>ZREMOVE +8

USER>PRINT +8
WRITE "this is line 9",!
USER>ZSAVE myroutine

USER>DO ^myroutine
this is line 9
USER>

メモ

ZSAVE 使用する場所

ZSAVE コマンドは、プログラマ・プロンプトで入力された場合と、ルーチンの XECUTE 文内でコード化された場合に限り機能します。このオペレーションはルーチンの実行に影響を与える可能性があるので、ルーチンの本体にコード化するべきではありません。ルーチン内ではあるが、XECUTE 文の外で ZSAVE をコーディングすると、その ZSAVE は現在のプログラムを保存します。

ZSAVE とルーチン・リコンパイル

ソース・コードを変更するコマンドを発行した場合、ZSAVE はルーチンをリコンパイルして保存します。ルーチンのソース・コードが無効な場合、ZSAVE は失敗して <NO SOURCE> エラーが発生し、既存のオブジェクト・コードを置換しません。例えば、次のコマンドは %SS オブジェクト・コード・ルーチンをロードして、(存在しない) ソース・コードから行を削除しようとし、その後 ^text グローバルに保存しようとします。この処理は失敗して、<NO SOURCE> エラーが発生します。

  ZLOAD %SS ZREMOVE +3 ZSAVE ^test

ソース・コードを変更するコマンドを発行しない場合、ZSAVE は指定された routine にオブジェクト・コードを保存します(明らかにリコンパイルは発生しません)。例えば、次のコマンドは %SS オブジェクト・コード・ルーチンをロードして、^text グローバルに保存します。この処理は成功します。

  ZLOAD %SS ZSAVE ^test

%Routine での ZSAVE

リモート・データセットに対する %routine に ZSAVE の実行を試みると、そのデータセットがプロセスの現在のデータセットであっても、<PROTECT> エラーが返されます。システム・ユーティリティのような変更不可のルーチンの名前には、その先頭にパーセント記号が使用されています。

並行 ZSAVE オペレーション

ネットワーク環境で ZSAVE を使用しているときは、2 つの異なるジョブがそれぞれのルーチンに同じ名前を割り当てて同時に保存する可能性があります。このオペレーションでは、一方のルーチンが他方を上書きし、予測できない結果を生じる可能性があります。こうした可能性がある場合は、ZSAVE オペレーションの前にルーチンに対して通知ロックを取得します。例えば、LOCK ^ROUTINE("name") を使用します。詳細は、"LOCK" コマンドを参照してください。ECP 経由でジョブを実行しているとき、ローカル・バッファの保護が他のクライアントには認識されないため、保存されたソースはこうした同時保存による障害を受けやすい状態になります。

関連項目

FeedbackOpens in a new tab