Oracle PL/SQL 过程不执行插入

Oracle PL/SQL procedure does not execute insert

我在 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.

但没有任何插入。它不起作用。 有什么想法吗?

所以你的过程中的逻辑(有点)合理,但你的测试逻辑不是:

当您调用 Set_Mod(1,1) 时,答案将是 v_isExists = 1 如果查询 returns 一行或 PL/SQL 异常 NO_DATA_FOUND 如果没有返回行。

因为你没有捕获这个异常,过程完成但没有插入发生...... v_isExists = 0 不会是真的,除非我想如果你调用 Set_Mod(0,0).

因此,请查看 this documentation 处理过程中的 PL/SQL 异常,并在 SO 中搜索 PL/SQL 异常处理以获取更多详细信息。