Как проверить, есть ли в таблице запись со значениями первичного ключа? - PullRequest
2 голосов
/ 02 июня 2010

У меня есть исключение, чтобы запретить вставку тех же записей в мой оракул.

Если запись, имеющая специальное значение Key, уже существует, должен быть включен интерфейс вставки записи.

Я слышал, что COUNT (*) имеет большую стоимость, которую я не хочу использовать.

Есть ли какой-нибудь альтернативный способ сделать это по крайней мере по стоимости?

1 Ответ

5 голосов
/ 02 июня 2010

Есть два варианта

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 по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...