Loading
save (テーブルレコードのUPSERT)
形式
save($constr, $savemap, $tablename, $filterlist)
引数
- $constr:ODBC接続文字列
- $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.