3

私はこのようなトリガーステートメントを持っています:

CREATE TRIGGER update_customer_address UPDATE OF address ON customers 
  BEGIN
    UPDATE orders SET address = new.address WHERE customer_name = old.name;
    -- RAISE ...
  END;
END;

編集:

ステップを実行したい:

int result = sqlite3_step(statement);

、、、などのresult結果コードが返されることはわかっています。私はまた、内に戻ることを発見しました。SQLITE_DONESQLITE_ROWSQLITE_CONSTRAINTRAISE ABORTTRIGGERSQLITE_CONSTRAINTresult

カスタムエラーコードを作成する方法はありますか?こんなことしたい

int result = sqlite3_step(statement);
// get custom error code here

sqliteのカスタムエラーコードで発生させることは可能ですか?または、回避策はありますか?

4

2 に答える 2

4

RAISE() 関数を使用してエラーをスローできます。定義済みのエラー コード (IGNORE、ABORT、FAIL、または ROLLBACK)を使用する必要ありますが、カスタム メッセージを追加できます。

CREATE TRIGGER update_customer_address UPDATE OF address ON customers 
BEGIN
  UPDATE orders SET address = new.address WHERE customer_name = old.name;
  SELECT CASE
    WHEN ( (SELECT * from orders WHERE address = 'old address!!') IS NOT NULL)
    THEN RAISE (FAIL, 'Can still find old address, not everything was updated!')
  END;
END;

RAISE() は、何か問題があった場合にのみ使用することを意図していることに注意してください。raise( ) の動作の詳細については、ドキュメントを参照してください。

于 2012-10-03T06:41:24.427 に答える
0

はい、もちろん、カスタム エラー コードまたはメッセージを定義できます。によって送信されたすべてのメッセージ

raise(ERR, "メッセージ")

C/C++ で取得できます

const char *sqlite3_errmsg(sqlite3*);
于 2017-09-05T10:44:35.837 に答える