【发布时间】:2020-12-04 10:49:34
【问题描述】:
我有一个包含这些列(id、first_name、birth)的表。我想创建一个仅在表中不存在插入的 id 时才插入新客户的过程。如果它已经存在,则不要插入它。到目前为止,这是我的代码,但出现错误“忽略第 3 行 sql 语句”。任何的想法?我需要在 oracle 中使用过程和 pl sql。谢谢!
CREATE OR REPLACE PROCEDURE add_emp(v_id IN int,
v_name IN varchar2,
v_bday IN date) IS
BEGIN
INSERT INTO Employees
(Id, First_name, Birth)
SELECT *
FROM (SELECT v_id, v_name, v_bday) AS tmp
WHERE NOT EXISTS (SELECT Id FROM Employees WHERE Id = v_id);
END;
/
DECLARE
m_id int := 3;
m_name varchar2 := 'John';
m_bday date := '16-Dec-1990';
BEGIN
add_cust(m_id, m_name, m_bday);
END;
/
【问题讨论】:
-
如果 ID 是一个 PK,或者至少是 UNIQUE,那么您不需要先检查它(“如果已经存在,则不要插入它”)。只做插入。如果 ID 已经存在,它将抛出一个异常,您可以根据需要处理该异常。
标签: sql oracle plsql sql-insert