PL / SQL插入过程,如果行不存在则插入

时间:2013-11-14 17:58:42

标签: sql oracle stored-procedures plsql

以下是我的程序。它会插入,但每次执行该过程时都会插入一个重复的行。我不希望如此,但我已经尝试了所有内容,但我不知道如何解决这个问题。

我的代码:

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 oracle中。

1 个答案:

答案 0 :(得分: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','john','JOHN'和'jOHN'。如果您不想这样做,请将其更改为upper(NOME_CIDADE) = upper(p_NOME)nlssort(NOME_CIDADE) = nlssort(p_NOME)

相关问题