このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1316769778/666
#  SQLite3を使っています。 
#   
#  カラムがなかったらinsert 
#  あったらupdateしたいのですが、 
#  どういうSQLをかけばいいのでしょうか? 
#   
#  insert into t1(c1, c2) values("hoge",10) 
#  update t1 set c2=10 WHERE c1="hoge" 
#  このときc1はuniqueです。 
#   
#  よろしくお願いします。 
# 
# 

'カラムがなかったらinsert あったらupdateしたい'(_テーブル,_カラムならび,_鍵カラム,_鍵値) :-
        findall(_カラム,(
                    テーブル定義(_テーブル,_番目,_カラム)),
                L1),
        鍵値をセットする(_テーブル,_鍵カラム,_鍵値,P),
        'カラムがなかったらinsert あったらupdateしたい'(P,_テーブル,_カラムならび).

鍵値をセットする(_テーブル,L1,_鍵カラム,_鍵値,P) :-
        length(L1,Len),
        length(L2,Len),
        nth1(Nth,L1,_鍵カラム),
        nth1(Nth,L2,_鍵値),
        P =.. [_テーブル|L2].

'カラムがなかったらinsert あったらupdateしたい'(P,_テーブル,_カラムならび) :-
        call(P),!,
        (   retract(P),
            Q =.. [_テーブル|_カラムならび],
            asserta(Q),
            fail;
            true).
'カラムがなかったらinsert あったらupdateしたい'(_,_テーブル,_カラムならび) :-
        Q =.. [_テーブル|_カラムならび],
        asserta(Q).