Oracle PL / SQL过程不执行insert

时间:2017-05-18 17:51:40

标签: plsql toad

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

但没有任何插入。它不起作用。 任何想法问题在哪里?

1 个答案:

答案 0 :(得分:1)

所以你的proc中的逻辑是(有点)声音,但你的测试逻辑不是:

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

因为您没有捕获此异常,所以过程完成但没有插入发生... v_isExists = 0将不会为真,除非我假设您调用Set_Mod(0,0)。

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