2

ColdFusion トランザクション (ColdFusion 9、MySQL 5) 内で 2 つのクエリを実行しています。

private boolean function updates()
{
    transaction
    {
        local.foo = new Query();
        local.foo.setSql("UPDATE foo SET bar = foo");
        local.foo.execute();

        local.bar = new Query();
        local.bar.setSql("UPDATE bar SET foo = bar");
        local.bar.execute();
    }

    if (both updates were successful)
    {
        return true;
    }
    else
    {
        return false;
    }
}

次のことを知りたいです:クエリが正しく実行されたかどうかをテストするboth updates where successfulには、を何に置き換える必要がありますか?if()

4

1 に答える 1

4

このソリューションはエラーを飲み込み、呼び出し元の関数に任せてエラーを調べて再スローします。そのため、私はあなたの戻り値を変更しました。これは、ブール値とエラー配列を持つ構造体です。

local.result.bool = false;
local.result.error = ArrayNew(1);
TRANSACTION action="begin" 
{
 try{
    local.foo = new Query();
    local.foo.setSql("UPDATE foo SET bar = foo");
    local.foo.execute();
    local.bar = new Query();
    local.bar.setSql("UPDATE bar SET foo = bar");
    local.bar.execute();
 }
 catch(any excpt){
    ArrayAppend(local.result.error, excpt);
 }finally{
   if(ArrayLen(local.result.error) gt 0){
      transactionRollback();
    }else{
      local.result.bool = true; 
    }
 } 
}
return local.result;
于 2011-02-08T18:33:34.300 に答える