Как перед вставкой проверить, есть ли уже запись с заданным значением?

Есть такая процедура:

Procedure INSERT(I_NAME, I_NUM) 
IS
BEGIN 

INSERT INTO Account(NAME, NUM)
VALUES(I_NAME, I_NUM)

END INSERT;

Хочу с помошью MERGE проверить, если в таблице нет записи со значением I_NUM в столбце NUM, тогда сделать INSERT.

Как это сделать?


Ответы (1 шт):

Автор решения: 0xdb

как это сделать?

Сделать надо следующее:

  1. Посмотреть в документации гл. CREATE PROCEDURE, MERGE.

  2. Создать минимальный, воспроизводимый пример, например, на db<>fiddle.

  3. Задать вопрос, указав в нём сообшение об ошибке, и обязательно пояснить, какие сложности возникли при устранении ошибки:

    ORA-00900: invalid SQL statement

  4. Теперь вам охотно помогут с решением:

    create table account (num, name) as select 1, 'name 1' from dual
    /
    create or replace procedure insertIfNotExists (num int, name varchar2) is
    begin 
        merge into account t using (
            select num num, name name from dual) s on (s.num = t.num)
        when not matched then insert values (s.num, s.name);
        dbms_output.put_line ('merged '||sql%rowcount||' row(s)'); 
    end insertIfNotExists;
    /
    begin  
        insertIfNotExists (1, 'name 1');
        insertIfNotExists (2, 'name 2');
    end;
    /
    dbms_output:
    start merge ...
    merged 0 row(s)
    merged 1 row(s)
    
    select * from account
    /
           NUM NAME  
    ---------- ------
             1 name 1
             2 name 2
    

    На db<>fiddle.

  5. Если предложенное решение помогло - принять ответ, если нет - оставить комментарий.

→ Ссылка