[英]PL/SQL Insert procedure, insert if the row doesn't exist
Below is my procedure. 以下是我的程序。 It inserts, but every time I execute the procedure it inserts a duplicated row. 它会插入,但是每次执行该过程时,都会插入重复的行。 I don't want that, but i have tried everything and I don't know how to resolve the issue. 我不想要那个,但是我已经尝试了一切,而且我不知道如何解决该问题。
My Code : 我的代码:
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;
/
This is in pl/slq oracle. 这在pl / slq oracle中。
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)
or 要么
INSERT INTO CIDADE
SELECT
seq_id_cidade.NEXTVAL,
p_NOME
FROM
dual
WHERE NOT EXISTS (SELECT 'x' FROM CIDADE WHERE NOME_CIDADE = p_NOME)
Note that the comparison NOME_CIDADE = p_NOME
is case sensitive, meaning that you can still insert 'John', 'john', 'JOHN' and 'jOHN'. 请注意,比较NOME_CIDADE = p_NOME
区分大小写,这意味着您仍然可以插入'John','john','JOHN'和'jOHN'。 If you don't want that, change it to something like upper(NOME_CIDADE) = upper(p_NOME)
or nlssort(NOME_CIDADE) = nlssort(p_NOME)
. 如果不希望这样,请将其更改为upper(NOME_CIDADE) = upper(p_NOME)
或nlssort(NOME_CIDADE) = nlssort(p_NOME)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.