gpt4 book ai didi

sql - 获取从 C# (oracle) 调用的插入语句使用的序列号

转载 作者:行者123 更新时间:2023-12-04 21:04:19 24 4
gpt4 key购买 nike

我需要在表中插入一条记录并将列(例如 orderid)的值设置为唯一的#。并返回使用的那个号码。

我认为这个过程是使用一个序列和一个带有 nextval 的插入语句:

insert into ordersTable(orderid) values(ordernums.nextval);

但是我如何获得使用过的号码呢?我的想法是,我必须从插入调用中取回它,否则如果我重新查询,nextval(或 currval)可能已经改变。

但我不确定该怎么做。我认为解决这个问题的一种方法是,在插入时,也将我唯一的唯一值添加到一个字段,然后重新查询该值。

还有其他方法吗?我想我可能在 sql 级别丢失了一些东西?

CtC

最佳答案

据我所知,Oracle 9i+ 有 RETURNING 子句:

DECLARE v_orderid ORDERSTABLE%TYPE;

INSERT INTO ordersTable
(orderid)
VALUES
(ordernums.nextval)
RETURNING orderid INTO v_orderid;

另一种方法是在 INSERT 语句之前填充变量:

在函数内:

DECLARE v_orderid ORDERSTABLE%TYPE := ORDERNUMS.NEXTVAL;

INSERT INTO ordersTable
(orderid)
VALUES
(v_orderid);

RETURN v_orderid;

使用 OUT 参数:

CREATE OR REPLACE PROCEDURE ORDER_INS(out_orderid OUT ORDERSTABLE%TYPE) 
AS
BEGIN

out_orderid := ORDERNUMS.NEXTVAL;

INSERT INTO ordersTable
(orderid)
VALUES
(out_orderid);

END;

此外,请注意序列的 CURRVAL 是特定于 session 的。无论您在当前 session 中调用 NEXTVAL 已有多长时间,也无论有多少其他 session 可能对同一序列调用了 NEXTVAL,ordernums.currval 将始终返回为您的 session 提供的序列的最后一个值。因此,尽管您有多种选项可以从 INSERT 中检索值,但这可能不是必需的——您可能只想在后续语句中引用 ordernums.currval。当然,由于 CURRVAL 是特定于 session 的,因此如果您在为同一序列调用 NEXTVAL 之前在 session 中调用 CURRVAL 是没有意义的(并且会返回错误)。

关于sql - 获取从 C# (oracle) 调用的插入语句使用的序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3783144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com