このディレクトリの索引
http://toro.2ch.net/test/read.cgi/db/1343899481/635
#  質問です、お願いします 
#  id|col1|col2 という構成のテーブルがあります 
#   
#  これに対して、以下のような条件と動作を実現したいと思います 
#  1)更新できるのはcol2が0の場合のみ 
#  2)更新できた場合、'updated'を返す 
#  3)もし、col2が0以外の場合、'update_fail' という値を返す 
#   
#  どんなクエリ文を書いたら良いんでしょうか 
#  (利用してるDBはmysql5です) 
# 
# 

'id|col1|col2 という構成のテーブルがあります
これに対して、以下のような条件と動作を実現したいと思います
1)更新できるのはcol2が0の場合のみ
2)更新できた場合、\'updated\'を返す
3)もし、col2が0以外の場合、\'update_fail\' という値を返す
どんなクエリ文を書いたら良いんでしょうか'(_id,_新しい_col1,_新しい_col2) :-
クエリ文(_id,_新しい_col1,_新しい_col2).

クエリ文(_id,_新しい_col1,_新しい_col2) :-
'更新できるのはcol2が0の場合のみそれ以外は\'update_fail\'を返す'(_id),!.
クエリ文(_id,_新しい_col1,_新しい_col2) :-
'更新できた場合、\'updated\'を返す'(_id,_新しい_col1,_新しい_col2),!.
クエリ文(_id,_新しい_col1,_新しい_col2) :-
'idが存在しない場合、\'update_fail not found id\'を返す'(_id).

'更新できるのはcol2が0の場合のみそれ以外は\'update_fail\'を返す'(_id) :-
table(_id,_col1,_col2),
\+(_col2 = 0),
writef('update_fail :: table(%q,%q,%q).\n',[_id,_col1,_col2]),!.

'更新できた場合、\'updated\'を返す'(_id,_新しい_col1,_新しい_col2) :-
retract(table(_id,_col1,0)),
asserta(table(_id,_新しい_col1,_新しい_col2)),
writef('updated :: table(%q,%q,%q).\n',[_id,_新しい_col1,_新しい_col2]),!.

'idが存在しない場合、\'update_fail not found id\'を返す'(_id) :-
writef('update_fail not found id :: %q\n',[_id]).