【发布时间】:2017-10-18 16:20:38
【问题描述】:
我在 TOAD 中有一个程序,它应该在检查记录不存在后插入新记录。 它创建成功:
CREATE OR REPLACE PROCEDURE Set_Mod (
p_TypeID IN NUMBER, p_LinkID IN NUMBER
)
AS
v_isExists NUMBER := 0;
v_query varchar2(200);
BEGIN
SELECT TypeID
INTO v_isExists
FROM myTable
WHERE LinkID = p_LinkID
AND TypeID = p_TypeID;
IF (v_isExists = 0) THEN
v_query := 'INSERT INTO myTable ( TypeID, LinkID ) VALUES (' || p_TypeID || ',' || p_LinkID || ')';
EXECUTE IMMEDIATE v_query;
END IF;
END;
/
我正在尝试使用此块运行该过程:
BEGIN
Set_Mod( 1, 1 );
END;
/
我在 TOAD 中获得了这些脚本输出:
Procedure created.
PL/SQL procedure successfully completed.
但没有任何插入。它不起作用。 任何想法问题出在哪里?
【问题讨论】:
-
看起来你的目标是找出一条记录是否已经存在,然后只有在一条记录不存在时才插入一行。阅读下面有关如何解决问题的答案,但还要考虑在两列上使用组合键 UNIQUE 索引,这样您就永远不能将具有相同 TypeID、LinkID 值的两行放入。 -- 然后你就可以捕获重复异常,也许做一个更新而不是插入?