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_DONE,SQLITE_ROWSQLITE_CONSTRAINT. 我还发现,RAISE ABORTTRIGGER返回SQLITE_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

是的,当然您可以定义自定义错误代码或消息。发送的所有消息

提高(错误,“消息”)

可以在 C/C++ 中通过

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