ADP
Programming Language ADP

Japanese

Freecode

Sourceforge.net

SourceForge.JP

Loading

save (テーブルレコードのUPSERT)

形式
 save($constr, $savemap, $tablename, $filterlist)
引数
完了時の動作
バックトラック時の動作
説明
 ODBC接続文字列については、DBライブラリを参照下さい。
 指定された値($savemap)で、指定されたテーブル($tablename)にレコードデータを保存します。UPSERTと呼ばれている操作を行うことで、一部のDBサーバーが対応しているMERGE文の代用とします。

$savemapは、以下のように、連想配列でキー部分にカラム名、値部分にそのカラムの値を指定します。
{ 'colname1' => value1, 'colname2' => value2, 'wcol1' => value1, 'wcol2' => value2 ... }
$filterlistは、$savemapのうちwhere句に入れるキー・値ペアのキーを指定します。
{ 'wcol1', 'wcol2', ... }

saveは最初に以下のようなSQLを発行し、フィルターで指定されたレコードが存在するか確認します。

 SELECT count(*) FROM tablename WHERE wcol1 = value1 AND wcol2 = value2 ...

該当するレコードが存在する場合はupdate述語が実行され、存在しない場合はinsert述語が実行されます。

※現在のバージョン(Ver0.7)はトランザクション(テーブルロック等)を、考慮していません。上記のレコードの確認から、insertまでに他のプログラムからinsertされる可能性があります。
安全に運用するには別途テーブルロックをかけるかアプリケーションレベルで同時実行が行われない等、排他制御の必要があります。

他のDBライブラリの述語やクエリー変数を返す述語等、連想配列を返す述語の結果を用いて、本述語を呼び出すことが考えられます。
その場合、ある連想配列から特定のキーを持った連想配列を新しく作成したい場合があります。この場合、lsmap述語を使用します。
そのほか、キーの値を変更しながら新しい連想配列を作成したい場合は、remap述語を使用します。
searchの戻り値等、通常の配列から連想配列を作成する場合は、mkmap述語を使用します。

DBライブラリのサンプル
Powered by ADP.