db2触发器中,如何写满足条件弹出提示框或者抛出错误?

例如:CREATETRIGGERDB2ADMIN.ttttbeforeUPDATEONDB2ADMIN.tableREFERENCINGNEWASNEWROWFOREAC... 例如:
CREATE TRIGGER DB2ADMIN.tttt before UPDATE ON DB2ADMIN.table REFERENCING NEW AS NEWROW FOR EACH ROW MODE DB2SQL
BEGIN ATOMIC
if NEWROW.id is null
then
弹出一个提示:“ID不能为空” 这里的提示该如何写呢,有没有相关函数?
end if;
END
展开
 我来答
匿名用户
2013-05-31
展开全部

SIGNAL SQLSTATE '75002'   ('ID不能为空') ;



测试成功的执行代码如下:

db2 => CREATE TRIGGER AfterInsertDetail \
db2 (cont.) => AFTER INSERT ON OrderDetail \
db2 (cont.) => REFERENCING NEW AS N \
db2 (cont.) => FOR EACH ROW MODE DB2SQL \
db2 (cont.) => BEGIN ATOMIC \
db2 (cont.) =>   DECLARE v_nowCount INT; \
db2 (cont.) =>   SET v_nowCount = \
db2 (cont.) =>     (SELECT Amount FROM Goods \
db2 (cont.) =>      WHERE ID = N.GoodsID ); \
db2 (cont.) =>   IF v_nowCount - N.Amount <  0 THEN \
db2 (cont.) =>     SIGNAL SQLSTATE '75002' ('库存不足!') ; \
db2 (cont.) =>   ELSE \
db2 (cont.) =>     UPDATE \
db2 (cont.) =>       Goods \
db2 (cont.) =>     SET \
db2 (cont.) =>       Amount = Amount - N.Amount \
db2 (cont.) =>     WHERE \
db2 (cont.) =>       ID = N.GoodsID; \
db2 (cont.) =>   END IF; \
db2 (cont.) => END
DB20000I  SQL 命令成功完成。

db2 => INSERT INTO OrderDetail VALUES(1, 1, 90)
DB20000I  SQL 命令成功完成。

db2 => INSERT INTO OrderDetail VALUES(1, 1, 20)
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0438N  应用程序发生错误或警告,其诊断文本为:"库存不足!"。  SQLSTATE=75002

db2 => select * from goods

ID          AMOUNT
----------- -----------
          1          10

  1 条记录已选择。

db2 => select * from OrderDetail

ID          GOODSID     AMOUNT
----------- ----------- -----------
          1           1          90

  1 条记录已选择。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式