我有一些针对 SQL Server 的原始 SQL 查询,它们使用 SCOPE_IDENTITY 来检索特定 INSERT 的生成 ID,在该 INSERT 发生在一次执行之后立即...
INSERT into Batch(
BatchName,
BatchType,
Source,
Area
) Values (
@strBatchName,
@strType,
@strSource,
@intArea
);
SELECT SCOPE_IDENTITY() BatchID;
问题是:
对于 Oracle 数据库,最好的方法是什么?
这可以通过标准 SQL 在 Oracle 上完成,还是我必须切换它以使用存储过程并将类似的东西放在存储过程的主体中?
如果它必须是一个存储过程,那么检索最后生成的序列号的事实上的标准方法是什么,注意考虑到多个线程上可能会有重叠的执行,所以这个机制需要检索正确的生成 ID 和不一定是最后生成的绝对 ID。
如果两个同时执行,则每个都必须从各自的调用中返回正确的生成 ID。请注意,由于调用的多线程性质,我没有使用 SQL Server 的“@@IDENTITY”。
如果可能的话,我宁愿将它保留为原始 SQL,因为这对我来说更容易跨平台管理(包含每个平台的 SQL block 的单个文件,由 DBMS 标识标签分隔)。存储过程对我来说需要更多的工作来管理,但如果这是唯一可能的方式,我可以这样做。
最佳答案
您可以使用以下语句将插入的 Id 获取为类似变量的事物。
INSERT INTO YOUR_TABLE(ID) VALUES ('10') returning ID into :Inserted_Value;
现在您可以使用以下语句检索值
SELECT :Inserted_Value FROM DUAL;
关于sql - 插入 Oracle 并检索生成的序列 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5558979/