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