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

时间:2011-11-16 19:03:05

标签: sql oracle oracle10g

如果表格中没有该号码,如何在表格中插入数字?

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

修改

表格如下:

PK   ID    Value
1     4     500
2     9     3

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

3 个答案:

答案 0 :(得分:5)

如果ID应该是唯一的,那么应该在表上定义一个唯一约束。如果您尝试插入已存在的值

,则会抛出错误
ALTER TABLE table_name
  ADD CONSTRAINT uk_id UNIQUE( id );

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

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

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

INSERT INTO table_name( id, value )
  SELECT 4, 100
    FROM dual
   WHERE NOT EXISTS( 
    SELECT 1
      FROM table_name
     WHERE id = 4 )

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

答案 1 :(得分:3)

尝试MERGE声明:

MERGE INTO tbl USING
    (SELECT 4 id, 100 value FROM dual) data
ON (data.id = tbl.id)
WHEN NOT MATCHED THEN
    INSERT (id, value) VALUES (data.id, data.value)

答案 2 :(得分:0)

INSERT INTO YOUR_TABLE (YOUR_FIELD)
SELECT '1' FROM YOUR_TABLE YT WHERE YT.YOUR_FIELD <> '1' LIMIT 1

当然,'1'将是您的号码或变量。 您可以使用INSERT + SELECT来解决此问题。