J'ai le code pour MySQL (Perl):
UPDATE pages
SET rkey = rkey + 2,
lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key
J'ai besoin d'utiliser ce code avec SQLite, mais il n'y a pas de support de la fonction IF (). Qu'est-ce que je peux faire?
Pour le SQL générique, vous pouvez utiliser CASE
:
CASE est utilisé pour fournir le type de logique if-then-else à SQL. Sa syntaxe est:
SELECT CASE ("column_name") WHEN "condition1" THEN "result1" WHEN "condition2" THEN "result2" ... [ELSE "resultN"] END FROM "table_name"
De http://www.sqlite.org/lang_expr.html section "L'expression CASE"
Par exemple.
UPDATE pages
SET rkey = rkey + 2,
lkey = CASE WHEN lkey >= $key THEN lkey + 2 ELSE lkey END
WHERE rkey >= $key
Un autre lien sur SQLite & CASE (avec un exemple de mise à jour avec subselect) http://sqlite.awardspace.info/syntax/sqlitepg09.htm
CASE peut être utilisé dans UPDATE en SQL générique, mais je n'ai aucune information sur le support SQLite des UPDATEs avec CASE
http://www.craigsmullins.com/ssu_0899.htm section "Utilisation des expressions CASE lors de la modification des données"
UPDATE pages
SET rkey = rkey + 2,
lkey = IF(lkey >= $key, lkey + 2, lkey)
WHERE rkey >= $key
??? à
UPDATE pages
SET lkey = lkey + 2
WHERE rkey >= $key AND lkey >= $key
UPDATE pages
SET rkey = rkey + 2,
WHERE rkey >= $key
N'est-ce pas mieux?