title: ORACLE : insert row if not exists - duplicate key error
body: <p>There was a bunch of similar questions, but I need to write my code.</p>
  
  <p>I know that, as a good practice, I should use <code>seq.nextval</code> instead of <code>SELECT NVL(Max(...</code>, but my homework is to write procedure, not create new sequence.</p>
  
  <p>I need insert new row if <code>NAZWA</code> is not duplicated, but have to increment <code>ID</code>.</p>
  
  <p>Table <code>MIEJSCOWOSC</code> has two columns (<strong>PK</strong> <code>ID_MIEJSCOWOSCI</code> as NUMBER, <code>NAZWA</code> as VARCHAR2)</p>
  
  <p>It is clear for me that my sequence counter
      <code>SELECT NVL(Max(m.ID_MIEJSCOWOSCI)+1,1) INTO mID</code> 
  is not working properly as I receive:</p>
  
  <blockquote>
    <p>An UPDATE or INSERT statement attempted to insert a duplicate key.</p>
  </blockquote>
  
  <p>How should I repair this code?</p>
  
  <pre><code>CREATE OR REPLACE PROCEDURE WstawMiejscowosc (
      NM IN Miejscowosc.Nazwa%TYPE) 
  AS
      mID Miejscowosc.ID_MIEJSCOWOSCI%TYPE;
  BEGIN
    SELECT NVL(Max(m.ID_MIEJSCOWOSCI)+1,1) INTO mID
    FROM Miejscowosc m;
    INSERT INTO Miejscowosc m
      select mID, NM
      from Miejscowosc 
      where not exists (select 1 from Miejscowosc m where m.Nazwa = NM);
  END;
  / 
  </code></pre>