簡體   English   中英

最佳實踐:.NET:如何針對oracle數據庫返回PK?

[英]Best practices: .NET: How to return PK against an oracle database?

使用SQLServer,似乎普遍接受的是,在插入的末尾添加SELECT SCOPE_IDENTITY()是返回新插入記錄的PK的最佳方法,假設您正在為pk使用自動增量字段。

但是,我似乎無法找到Oracle的等價物。

最佳實踐似乎是使用序列來生成PK,但是如何實現甚至可以有不同的選項。 您是否將其留給開發人員插入sequence.nexval,或使用觸發器?

在任何一種情況下,獲取新ID似乎是一個常見問題。

我遇到的建議和解決方案包括:

  • 創建一個返回PK的存儲過程
  • 從seq.nextval運行select id,然后將其傳遞給insert
  • 插入后選擇max(id)(注意:不要這樣做!)
  • 在插入中添加RETURNING子句

對於這種情況,“最佳實踐”解決方案應該是什么?

您可以使用RETURNING子句在Oracle存儲過程中執行此操作。

例如:

TABLEA具有NAME和EMP_ID。 插入記錄時,內部填充EMP_ID。

INSERT INTO TABLEA(NAME)VALUES('BOB')將EMP_ID返回到o_EMP_ID;

這是假設該行在存儲過程中,輸出參數為o_EMP_ID。

希望有幫助......如果沒有,這里有一個更詳細的例子:

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

RETURNING子句僅用於此類用法,因此我將其稱為最佳實踐。

另一種方法是在插入后選擇seq.CURRVAL。 返回會話從序列中獲取的最后一個值。

存儲過程和返回子句具有單個數據庫調用的獨特優點,任何其他解決方案都是劣等的。 無論您是通過存儲過程來執行還是使用返回子句,本身就是一整套蠕蟲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM