gpt4 book ai didi

mysql - Oracle 等效于 MySQL 更新忽略

转载 作者:可可西里 更新时间:2023-11-01 06:37:02 26 4
gpt4 key购买 nike

我需要运行一个违反唯一约束的 Oracle 查询,并且只针对不违反约束的记录。在 MySQL 中,我相信这可以使用 ignore 来完成。命令。 Oracle 中是否有等效项?

最佳答案

您可以为此使用 Oracle 的错误记录功能:

首先您需要创建一个表,稍后将包含被忽略的行:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('YOUR_TABLE', 'YOUR_TABLE_ERROR_LOG');

这会为名为 YOUR_TABLE 的表创建一个名为 YOUR_TABLE_ERROR_LOG 的表(显然您只需要这样做一次)。

当您运行更新时,您需要添加 LOG ERRORS 子句:

UPDATE your_table
SET ...
WHERE ...
LOG ERRORS INTO YOUR_TABLE_ERROR_LOG ('UPDATE running at '||to_char(sysdate, 'yyyy-MM-dd HH24:MI:SS'))
REJECT LIMIT UNLIMITED;

指定的字符串是一个任意值,可帮助您识别生成错误的操作。

更新后,您可以查询表 YOUR_TABLE_ERROR_LOG 以查看发生了哪些错误以及原因。如果您对错误不感兴趣,只需在之后截断错误日志表即可。

更多详细信息,请参阅手册:
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_10008.htm#BCEFBFCD

编辑 2014-10-27

从 Oracle 11.2 开始,有一个名为 CHANGE_DUPKEY_ERROR_INDEX 的新提示可用于此目的。不过我从来没有尝试过这个。

手册中的详细信息: http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDIFFJE

对于 INSERT 操作,有一个名为 IGNORE_ROW_ON_DUPKEY_INDEX 的类似提示:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDEGDDG

一些例子:

关于mysql - Oracle 等效于 MySQL 更新忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438624/

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