蟾蜍plsql错误执行存储过程

Posted

技术标签:

【中文标题】蟾蜍plsql错误执行存储过程【英文标题】:toad plsql error executing stored procedure 【发布时间】:2013-01-13 20:16:33 【问题描述】:

没有明显的原因,我收到了这个错误:

ORA-00942:表或视图不存在

在行中设置调试光标:

 SELECT AMD.MSG_DATE

来自以下存储过程:

CREATE OR REPLACE PROCEDURE CTI_MATRIX.AMD_NEEDMSG (v_CRN IN VARCHAR2)
IS

return_flag INTEGER;
row_cnt INTEGER;
number_of_days INTEGER;
var_DATE DATE;

CURSOR ACCNTSEARCH (P_CRN IN VARCHAR2) IS
    SELECT AMD.MSG_DATE    
       FROM TBL_AMD_NEEDMSG AMD
      WHERE AMD.PHONE_NUMBER = P_CRN;

BEGIN

OPEN ACCNTSEARCH(v_CRN);
FETCH ACCNTSEARCH INTO var_DATE;
IF ACCNTSEARCH%NOTFOUND 
THEN
    row_cnt := 0;
ELSE
    row_cnt :=1;
END IF;
CLOSE ACCNTSEARCH;

IF (row_cnt = 0)
THEN
        INSERT INTO TBL_AMD_NEEDMSG (PHONE_NUMBER, MSG_DATE) VALUES (v_CRN , SYSDATE); 
        return_flag := 1;
ELSE
    SELECT SYSDATE-var_DATE INTO number_of_days FROM dual;

     IF (number_of_days>7)
    THEN 
        UPDATE TBL_AMD_NEEDMSG SET MSG_DATE = SYSDATE WHERE PHONE_NUMBER = v_CRN;
        return_flag := 1;
    ELSE
         return_flag := 0;
    END IF;

END IF;    

COMMIT;

dbms_output.put_line('result='||return_flag );    
EXCEPTION
WHEN OTHERS THEN
    ROLLBACK;
    --raise_application_error(-20001,'An error was encountered '||SQLERRM);


END AMD_NEEDMSG;
/

顺便说一句,存储过程是通过以下调用块调用的:

DECLARE 
 V_CRN VARCHAR2(32767);

BEGIN 
 V_CRN := '5457648547567';
 CTI_MATRIX.AMD_NEEDMSG ( V_CRN );
 DBMS_OUTPUT.Put_Line('');

 COMMIT; 
END;

绝对不解,因为表肯定存在并且如下声明:

SELECT AMD.MSG_DATE    
       FROM TBL_AMD_NEEDMSG AMD
      WHERE AMD.PHONE_NUMBER =  '85100000000';

获取没有问题的记录集结果。

请帮忙。

【问题讨论】:

也许错误不是由于您所在的特定行,而是某些查询 TOAD 正在尝试执行?尝试运行 TOAD 的 SQL Monitor 或 SQL Tracker 并监视 toad.exe。它将捕获 toad 正在进行的所有 SQL 调用,也许您可​​以看到错误的来源。 【参考方案1】:

您的方案是否与 CTI_MATRIX 相同? 我的意思是你是在 CTI_MATRIX 用户下运行你的选择,因为我看到你在这个方案中创建了存储过程。 祝你好运

【讨论】:

是的,这是 Toad 问题,在调试模式下运行。发生这种情况的代码行在游标声明中。几次 OK 点击后,按摩消失,执行按预期恢复,逐行执行。不管怎么说,还是要谢谢你。但有趣且非常具有误导性的行为。

以上是关于蟾蜍plsql错误执行存储过程的主要内容,如果未能解决你的问题,请参考以下文章

PLSQL执行存储过程提示ORA-01008

如何在plsql中执行存储过程

我用PLSQL写了个存储过程,然后怎么执行那?我放在test窗口里执行,没有反应啊

如何用plsql查看存储过程的源码

我用plsql创建的存储过程为啥是无效的?

在 Oracle 内存缓存中长时间存储 PLSQL 存储过程值