gpt4 book ai didi

c# - 在 Oracle 匿名 block 中获取更新或删除的记录

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:20 25 4
gpt4 key购买 nike

我有一个连接到 Oracle 数据库的 C# 应用程序。我动态生成 PL\SQL 语句并使用 CommandType=Text 执行它们(我不使用 SP)。

我的选择语句是这样的:

DECLARE
-- <declaring>
BEGIN
-- <some PL\SQL code>
OPEN :refCursor FOR SELECT * FROM tablename
-- <some PL\SQL code>
END;

在我的 C# 代码中,refCorsor 是 Oracle.DataAccess.Client.OracleDbType.RefCursor 类型的参数,它使用输出方向添加到我的 OracleCommand 实例的参数中。

在 ExecuteNonQuery 调用返回后,我读取了我的 refCorsor 参数以从我的选择中获取数据。

我的问题是,当我想使用 RETURNING BULK COLLECT INTO 子句在 Oracle 中获取已删除的记录时。

如您所知,在 Oracle 中,RETURNING BULK COLLECT INTO 子句可用于在删除语句后获取已删除记录的列。此子句将数据放入集合中。

DECLARE
TYPE RecordType IS RECORD("Id" INT,"Name" nvarchar2(50));
TYPE IdsTableType IS TABLE OF RecordType;
IdsName IdsTableType;
BEGIN
DELETE FROM "dbo"."AutoInt" WHERE "Name"='aaaa'
returning "Id","Name" BULK COLLECT INTO IdsName;
END;

问题是如何从我的 C# 代码中读取 IdsName 的内容?

最佳答案

您可以在实际删除之前将要删除的记录集提取到游标中。当游标打开时,Oracle 将维护记录的状态。

DECLARE
-- <declaring>
BEGIN
-- <some PL\SQL code>
OPEN :refCursor FOR SELECT * FROM "AutoInt" WHERE "Name"='aaaa';
DELETE FROM "AutoInt" WHERE "Name"='aaaa';
-- <some PL\SQL code>
END;

关于c# - 在 Oracle 匿名 block 中获取更新或删除的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387410/

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