我在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.
但没有任何插入。它不起作用。 任何想法问题在哪里?
答案 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异常处理以获取更多详细信息。