如何检查表是否具有主键值的记录?

时间:2010-06-02 03:28:14

标签: oracle

我有一个例外,以防止在我的oracle上插入相同的记录。

如果已存在具有特定键值的记录,则必须启用记录插入接口。

我听说COUNT(*)有很多我不想使用的费用。

有没有其他方法可以降低成本?

1 个答案:

答案 0 :(得分:5)

有两种选择

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;

我已经展示了PL / SQL代码片段,因为您没有指定客户端语言(例如PHP,Python ......)。您可以以不同方式处理异常和/或检查SQL%ROWCOUNT。