简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM