oracle - 如何检查表中是否有带有主键值的记录?

标签 oracle

我有一个异常(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/

相关文章:

php - 迪尔德 : lazy symbol binding failed for php oic8 on Apple M1

oracle - 如何在oracle存储过程中使用sum()函数?

java - JDBC Oracle 结果集空指针异常

oracle - Oracle 中的显式游标和隐式游标有什么区别?

sql - 数据库不区分大小写索引?

c# - SQL Server 相当于 Oracle 'byte'

database - session 中所有查询的 Oracle 中 NULL 值的排序顺序

sql - Sybase 开发人员询问 : How To Create a Temporary Table in Oracle?

database - Oracle数据库软件包的编译历史和错误记录

sql - 无法在 Oracle 12c 的新安装中连接到数据库