c# - 在 Oracle DB 中获取正确的自动递增 ID

标签 c# database oracle primary-key

我正在 ORACLE 数据库表中插入一行,其中 主键ID是自增的。 和 我正在从该表中检索自动增量 ID。

如果很多人使用同一个表。 我可能会遇到消费者生产者问题 获取其他用户的ID。

SO 上的一些用户提到了获取这些增量 ID 基于connection这不会导致消费者生产者 问题:

只想用SO检查以下内容:

第一:

我能从下面的场景中获得准确的自动增量ID吗:

1) Two computer with in different subnet using DB.
2) Two computer wiht in same subnet using DB.
3) Two process using using DB connection.
4) Two thread uisng DB connection.

第二:

 If my insert is:
 Insert into Tables (ID,NAME,DESCRIPTION) values (DBNull,'Name','Description');

 What should be my query to get the autoincremented ID generated for above
 Insert.

C# related command will do much help :)

最佳答案

您应该使用返回子句:

declare
    v_id TABLES.ID%TYPE;
begin
    Insert into Tables (ID,NAME,DESCRIPTION)
    values (seq.nextval,'Name','Description')
    RETURNING id INTO v_id;
--
    dbms_output.put_line(v_id);
end; 

通过这种方式,您可以获得实际插入的 ID,而不必重新查询最高 ID 并希望它是正确的。

关于c# - 在 Oracle DB 中获取正确的自动递增 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500732/

相关文章:

c# - 我想从 mysql 数据库检索图像,但出现错误 "system parameter is not valid at system drawing image fromstream... "

c# - Stackexchange Redis - 如何对大量记录进行分页

php - 开源 PHP 项目中的数据库查询?

mysql - OpenSuse - 在 mysql 上设置时区

c# - MonoTouch.Dialog 可以与级联数据源一起使用吗?

c# - JsonDiffpatch().Diff() 无法比较电子邮件地址和长度超过 50 个字符的字符串?

mysql - MySQL中不使用分号可以形成合法的语句吗?

mysql - 左/右外连接是否需要 On 子句

sql - Oracle 中的 SUM(COUNT())

java - 为什么我无法使用 XMLType 从 CLOB XML 中将此值提取到 JDBC 查询中?