最佳实践:.NET:如何针对oracle数据库返回PK?

时间:2020-03-06 14:59:10  来源:igfitidea点击:

对于SQLServer,似乎普遍认为,在插入的末尾添加SELECT SCOPE_IDENTITY()是返回新插入记录的PK的最佳方法,前提是我们对pk使用了自动增量字段。

但是,我似乎找不到与Oracle相当的产品。

最佳实践似乎是使用序列来生成PK,但是如何实现也有不同的选择。我们是让开发人员插入sequence.nexval还是使用触发器?

无论哪种情况,找回新的ID似乎都是一个普遍的问题。

我遇到的建议和解决方案包括:

  • 创建一个存储过程返回PK
  • 从seq.nextval运行选择ID,然后将其传递给插入
  • 插入后选择max(id)(注意:请勿这样做!)
  • 在插入中添加一个RETURNING子句

对于这种情况,"最佳实践"解决方案应该是什么?

解决方案

RETURNING子句仅用于这种用法,因此我将其称为使用它的最佳实践。

另一种选择是在插入后选择seq.CURRVAL。返回该会话从序列中获得的最后一个值。

我们可以使用RETURNING子句在Oracle存储过程中执行此操作。

例如:

TABLEA具有NAME和EMP_ID。插入记录时,将在内部填充EMP_ID。

插入到TABLEA(NAME)值('BOB')中,将EMP_ID返回到o_EMP_ID;

假设该行位于输出参数为o_EMP_ID的存储过程中。

希望对我们有所帮助...如果没有,这是一个更详细的示例:

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/returninginto_clause.htm

存储过程和returning子句具有单个数据库调用的独特优势,而其他任何解决方案都不如。无论是通过存储过程还是使用returning子句本身都是蠕虫的全部。