いいえ、存在しない場合にのみ挿入しないでください。これには2つの操作が必要です。それが存在するかどうかを確認してから、レコードを挿入する必要があります。
これに対する正しい方法は、テーブルに一意の制約を作成することです。ドキュメントに記載されているようにこれをインラインで行うことができます。または、テーブルがすでに存在する場合は、それを変更して制約を追加できます。
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;