我有一个异常(exception),以防止在我的预言机上插入相同的记录。
如果已经存在具有特定Key值的记录,则必须启用记录插入接口(interface)。
我听说 COUNT(*) 有很多成本,我不想使用。
有没有其他方法可以使其成本最低?
最佳答案
有两种选择
BEGIN
INSERT INTO table (pk_col, col_a, col_b) VALUES (:pk, :col_a, :col_b);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
UPDATE table SET col_a = :col_a, col_b = :col_b WHERE pk_col = :pk;
END;
或
BEGIN
UPDATE table SET col_a = :col_a, col_b = :col_b WHERE pk_col = :pk;
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO table (pk_col, col_a, col_b) VALUES (:pk, :col_a, :col_b);
END IF;
END;
由于您没有指定客户端语言(例如 PHP、Python...),因此我显示了 PL/SQL 代码片段。您可以以不同的方式处理异常和/或检查 SQL%ROWCOUNT。
关于oracle - 如何检查表中是否有带有主键值的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2954800/