插入Oracle并检索生成的序列ID
我有一些SQL Server的原始SQL查询,它们使用SCOPE_IDENTITY在一次执行INSERT后立即检索特定INSERT的生成ID ...
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,因为我更容易跨平台管理(包含由DBMS识别标签分隔的每个平台的SQL块的单个文件)。存储过程对我来说要管理的工作要多一些,但如果这是唯一可能的话,我可以这样做。
没有找到相关结果
已邀请:
5 个回复
贡炮逗握惫
然后,您可以调用该过程而不是执行普通插入,例如从一个令人厌恶的块:
您可以在没有明确匿名阻止的情况下进行呼叫,例如来自SQL * Plus:
...然后使用绑定变量
来引用生成的值:
温拎凯玛
...返回下一个号码。要查找最后创建的序列nr(在您的会话中),您将使用:
该站点有几个关于如何使用序列的完整示例。
氏脑
获取插入表中的序列。 喜欢:
或者只返回
。如果您没有使用SEQUENCE,并且在某些计算中到达序列,您可以有效地使用
。
恋裂
现在,您可以使用以下语句检索值
缔恃钨
或者,作为pl-sql脚本: