2013-11-14 73 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; 
/

這是在PL/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是大小寫敏感的,這意味着你仍然可以插入「約翰」,「約翰」,「約翰」和「約翰」。如果您不想要,請將其更改爲upper(NOME_CIDADE) = upper(p_NOME)nlssort(NOME_CIDADE) = nlssort(p_NOME)之類的內容。

+1

WHEN _NOT_ MATCHED :-) –

+0

是的,我注意到了。已經修復。謝謝 :) – GolezTrol