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 异常处理以获取更多详细信息。
我在 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 异常处理以获取更多详细信息。