仅当表中尚未存在某个值时才插入SQL?

ant*_*pug 1 sql oracle oracle10g

如果表中还没有数字,如何在表中插入数字?

我正在寻找特定的SQL代码,不知道如何处理这个问题.尝试了几件事,没有任何工作.

编辑

表看起来像这样:

PK   ID    Value
1     4     500
2     9     3
Run Code Online (Sandbox Code Playgroud)

因此,如果我尝试INSERT (ID, Value) VALUES (4,100)它不应该尝试这样做!

Jus*_*ave 5

如果ID应该是唯一的,则应该在表上定义唯一约束.如果您尝试插入已存在的值,则会抛出错误

ALTER TABLE table_name
  ADD CONSTRAINT uk_id UNIQUE( id );
Run Code Online (Sandbox Code Playgroud)

如果尝试插入重复键,您可以捕获错误并执行任何操作 - 从忽略错误到记录并重新引发异常以引发自定义异常

BEGIN
  INSERT INTO table_name( id, value ) 
    VALUES( 4, 100 );
EXCEPTION
  WHEN dup_val_on_index
  THEN
    <<do something>>
END;
Run Code Online (Sandbox Code Playgroud)

您还可以对其进行编码,INSERT以便插入0行(从数据模型的角度来看,您仍然希望存在唯一约束,因为它为优化程序提供了更多信息,并可能使未来的查询更有效)

INSERT INTO table_name( id, value )
  SELECT 4, 100
    FROM dual
   WHERE NOT EXISTS( 
    SELECT 1
      FROM table_name
     WHERE id = 4 )
Run Code Online (Sandbox Code Playgroud)

或者您可以编写代码,MERGE以便将VALUE列从500 更新为100而不是插入新行.