2013-11-14 3 views
0

Ниже приведена моя процедура. Он вставляет, но каждый раз, когда я выполняю процедуру, он вставляет дублируемую строку. Я не хочу этого, но я все пробовал, и я не знаю, как решить проблему.PL/SQL Процедура вставки, вставить, если строка не существует

Мой код:

CREATE OR REPLACE PROCEDURE Insert_Cidades(p_NOME CIDADE.NOME_CIDADE%TYPE) 
IS 
BEGIN 
    INSERT INTO CIDADE(COD_CIDADE,NOME_CIDADE) VALUES(seq_id_cidade.NEXTVAL,p_NOME); 
END Insert_Cidades; 
/

Это в пл/SLQ оракул.

ответ

1
MERGE INTO CIDADE 
USING (SELECT p_NOME as NOME FROM DUAL) x 
ON (x.NOME = NOME_CIDADE) 
WHEN NOT MATCHED THEN 
    INSERT (COD_CIDADE, NOME_CIDADE) 
    VALUES (seq_id_cidade.NEXTVAL, p_NOME) 

или

INSERT INTO CIDADE 
SELECT 
    seq_id_cidade.NEXTVAL, 
    p_NOME 
FROM 
    dual 
WHERE NOT EXISTS (SELECT 'x' FROM CIDADE WHERE NOME_CIDADE = p_NOME) 

Обратите внимание, что сравнение NOME_CIDADE = p_NOME чувствителен к регистру, что означает, что вы можете вставить 'Джон', 'Джон', 'Джон' и 'JOHN'. Если вы этого не хотите, замените его на upper(NOME_CIDADE) = upper(p_NOME) или nlssort(NOME_CIDADE) = nlssort(p_NOME).

+1

WHEN _NOT_ MATCHED :-) –

+0

Да, я заметил. Исправлено. Благодаря :) – GolezTrol

Смежные вопросы