このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/70
#  使用DB:postgresql 
#   
#  DBにこんなテーブルがあり 
#  name price 
#  りんご 100 
#  バナナ 200 
#  みかん 150 
#   
#  手元にこんなCSVデータがあって 
#  りんご,150 
#  みかん,100 
#   
#  CSVのデータを元に一括でUPDATEしたいです。 
#  name price 
#  りんご 150 
#  バナナ 200 
#  みかん 100 
#   
#  CSVデータの文字列加工はPHP使うので大体のことは出来ます。 
#  最悪1行ずつUPDATEでいいのですが、行数が多いので出来ればSQL発行を1回にしたいです。お願いします。 
# 
# 
:- dynamic(テーブル/1).

'CSVデータによってテーブルを更新する'(_CSVファイル) :-
        get_split_lines(_CSVファイル,[','],LL),
        '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'(LL).

'第一項を鍵にデータが存在すれば更新、存在しなければ追加する'([]).
'第一項を鍵にデータが存在すれば更新、存在しなければ追加する'([L|R]) :-
        テーブルを更新する(L),
        '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'(R).
'第一項を鍵にデータが存在すれば更新、存在しなければ追加する'([L|R]) :-
        テーブルに追加する(L),
        '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'(R).

テーブルを更新する([_1,_2]) :-
        retract(テーブル(_1,_)),
        assertz(テーブル(_1,_2)),
        fail.
テーブルを更新する(_).

テーブルに追加する([_1,_2]) :-
        \+(テーブル(_1,_)),
        assertz(テーブル(_1,_2)).