OracleBulkCopy 自动提交

发布于 2024-10-21 06:13:32 字数 134 浏览 5 评论 0原文

C#.Net 我正在使用 OracleBulkCopy 将数据复制到声明为“提交时删除”的全局临时表。所以当我使用 OracleBulkCopy.WriteToServer(DataReader) 时。它提交了,我正在丢失所有数据。如何防止这种情况发生?

C#.Net I am using OracleBulkCopy to copy data to global temp tables that are declared as Delete on commit. So when I use OracleBulkCopy.WriteToServer(DataReader). It commits and I am losing all the data. How to prevent this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

倦话 2024-10-28 06:13:32

OracleBulkCopy 似乎不支持事务。使用自动提交从来都不是明智的做法,而是以更受控的方式进行复制,例如使用批量插入。

OPEN z;
LOOP
    FETCH z BULK COLLECT INTO z_array LIMIT z_array_size;

    FORALL i IN 1..z_array.COUNT
    INSERT INTO t2 VALUES z_array(i);

    EXIT WHEN z%NOTFOUND;
END LOOP;

OracleBulkCopy seems not to support transactions. Auto commit is never smart to use, copy in a more controlled way for example using bulk inserts.

OPEN z;
LOOP
    FETCH z BULK COLLECT INTO z_array LIMIT z_array_size;

    FORALL i IN 1..z_array.COUNT
    INSERT INTO t2 VALUES z_array(i);

    EXIT WHEN z%NOTFOUND;
END LOOP;
尝蛊 2024-10-28 06:13:32

无论如何,在使用 .NET 时,将全局临时表声明为“提交时删除”并不是一个好主意。

更好的做法是在做任何你想做的事情之前从 gtt 中删除,并在提交后让它保持原样。调试也变得更加容易。

It is no good idea to declare global temporary tables as Delete on commit when using .NET anyway.

Better practice is to delete from gtt before doing whatever you want and let it as it is after commit. Debugging becomes easier too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文