0

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

我的代码:

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

4

1 回答 1

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)or的内容nlssort(NOME_CIDADE) = nlssort(p_NOME)

于 2013-11-14T18:04:14.837 回答