不,仅当它不存在时才插入。这需要两个操作。您必须检查它是否存在,然后您必须插入记录。
正确的方法是在您的表上创建一个唯一约束。您可以按照文档中的说明内联执行此操作,或者如果您的表已经存在,您可以更改它以添加约束:
ALTER TABLE table_name
add CONSTRAINT constraint_name UNIQUE (city);
然后,您在插入一个已经存在的城市时捕获引发的异常,然后对获得的信息做任何您想做的事情。
您还错误地增加了您的 ID。您应该使用SEQUENCE,它可以为您节省另一个 SELECT。
CREATE SEQUENCE city_seq
START WITH <current max ID>
INCREMENT BY 1;
然后您的程序变为:
create or replace procedure PlaceName (
town in city.name%type ) is
begin
insert into city
values(city_seq.nextval, town);
-- Catch the raised exception if the city already exists.
exception when dup_val_on_index then
<do something>;
end;