以下是我的程序。它会插入,但每次执行该过程时都会插入一个重复的行。我不希望如此,但我已经尝试了所有内容,但我不知道如何解决这个问题。
我的代码:
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中。
答案 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)
。