Как перед вставкой проверить, есть ли уже запись с заданным значением?
Есть такая процедура:
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
→ Ссылка
как это сделать?
Сделать надо следующее:
Посмотреть в документации гл. CREATE PROCEDURE, MERGE.
Создать минимальный, воспроизводимый пример, например, на db<>fiddle.
Задать вопрос, указав в нём сообшение об ошибке, и обязательно пояснить, какие сложности возникли при устранении ошибки:
ORA-00900: invalid SQL statement
Теперь вам охотно помогут с решением:
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.
Если предложенное решение помогло - принять ответ, если нет - оставить комментарий.