在没有抛出异常的情况下,SQL(特别是Oracle-PL / SQL)中的INSERT
是否会出现故障?我在INSERT
之后看到代码中的检查,它验证SQL%ROWCOUNT = 1 ELSE
它引发了自己的用户定义的异常。我不明白这是怎么发生的。
答案 0 :(得分:8)
没有例外,它不能失败。编写代码的开发人员可能不知道。
after语句触发器可以想象删除刚刚插入的行。当然,INSERT ... SELECT可能找不到要插入的行,因此会导致SQL%ROWCOUNT = 0.
答案 1 :(得分:2)
除了提到的基于触发器的问题@mcabral之外,你可以有一个成功插入但插入不是1行的插入。例如,插入的insert into blah(col1) select col2 from foo
样式。
答案 2 :(得分:2)
正如@TonyAndrews和@GinoA所提到的,INSERT
可以通过多种方式返回除了一行之外的其他内容(触发器,INSERT INTO tablename SELECT...
语法)。
但更大的问题是你在PL / SQL中。因此,SQL%ROWCOUNT
值可用作确定程序执行流程的条件,包括发出COMMIT
或ROLLBACK
语句。
即使只引发用户定义的异常,调用PL / SQL块也可以自己处理异常。
编辑:有人应修改问题标题以指示PL / SQL(如问题本身所示),因为这与标题所暗示的SQL范围不同。