在删除记录之前检查记录是否存在是一种好习惯

Mik*_*yev 3 oracle delete plsql

在调查其他人编写的存储过程时,我遇到了以下 SQL/PLSQL:

1. V_COUNT NUMBER(5,0);
.........
2. SELECT COUNT(*) INTO V_COUNT FROM TABLE1 WHERE COL1='SOMEVALUE';
3. IF V_COUNT>0 THEN
4.   DELETE FROM TABLE1 WHERE COL1='SOMEVALUE';
5. END IF;
Run Code Online (Sandbox Code Playgroud)

仅第 4 行中的 DELETE 语句是否足以涵盖这 5 行中的所有逻辑?我首先想到可能 V_COUNT 用于其他地方,但事实并非如此。我想不出有什么好的理由使简单的删除语句如此复杂。您是否也认为这是一个糟糕的设计,或者有什么我看不到的地方?

Col*_*art 7

我只是delete

即使我只需要在恰好有2 条记录时才删除,那么我也会将此条件添加到 where 子句中,例如

DELETE FROM table1
WHERE col1='somevalue'
AND (SELECT COUNT(*) FROM table1 WHERE col1 = 'somevalue') = 2;
Run Code Online (Sandbox Code Playgroud)

在编写删除语句的所有情况下,请考虑通常 where 子句通常是

  • 使用键限制为单行;
  • 使用标志/代码/状态列限制为一组行;或者
  • 使用一系列值限制到一组行——通常是日期。