存储过程报错怎么看
1.
打开pl/sql
developer如果
在机器上安装了pl/sql
developer的话,打开pl/sql
developer界面输入
用户名,密码和host名字,这个跟在程序中web.config中配置的完全相同,点击确定
找到
需要调试的存储过程所在的包(package
bodies),如pack_activity,点击右键,在弹出菜单中选择[查看],得到包中的所有存储过程和他们的代码.
2.
添加debug信息为了
能够单步跟踪存储过程,需要为其所在的包添加debug信息,右键点击需要调试的包,在弹出菜单中选中[添加调试信息](这个很重要).这样
就为包体添加了调试信息。
3.
调
试存储过程现在
所有的准备工作都做好了,可以调试跟踪存储过程了。选择
需要调试的存储过程,点击右键,在弹出菜单中
选择[测试],进去测试窗口.测试窗口中有为了测试该存储过程自动所产生的代码,当然你也可以自己另外加入和修改代码,对于我们目前只是为了调试存储过程,
自动生成的代码已经足够了。接着按照如下的步骤进行调试。
(1)添加存储过程所需要的参数,我们项目中的大多数存储过程都是需要参数
的,参数可以在测试窗口右下部分输入。如:getpanno_new需要一个输入参数v_employeeid,我们输入180,输出参数是mycursor,是查看结果的,不需要输入任何值。
(2)开始调试,点击[调试]菜单->[开始](或者按f9),就进去调试模式了,程序开始停在begin这一行.
(3)以后的调试过程跟我们熟悉的的调试过程就一样了:运行(ctrl+r)单步
进入(ctrl+n)单步
跳过(ctrl+o)单步
退出(ctrl+t)或者
点击debug工具条上的按扭:当按ctrl+n进去存储过程的源代码中后
在这
个窗口中可以查看过程中的变量值和堆栈。
(4)调试运行完了后,可以查看结果如下(点击mycursor变量旁边的按钮).
4.
tip
令人
比较郁闷的是我们项目中很多的存储过程都是一个select语句,不管这个select语句多么复杂(select语句中有嵌套的子select语句),它也只能作为一行代码,单步跟踪就没有什么意义了。
② 调试存储过程遇到数据库错误如何查看错误信息
txt中包含有不是标准的字符格式,你可以先用导入EXCEL或ACCESS,然后再用SQL导入EXCEL或ACCESS,
③ CALL存储过程,报错.该怎么处理
首先,把写好的存储过程执行检查,看看是否报错;
其次,如果报错的话,就看看提示什么错误,定位到错误的位置,修正它;
再次,就是运行检查,如此按照以上的步骤反复验证。
另外,需要技巧的是,有时候很长的存储过程,需要逐步和分段分别执行调试。
④ 帮忙看一下我的存储过程错误在哪
create or replace procere pro_insert (p_number number)return number is
begin
for i in 1..p_number loop
--insert into test100 values(i,'aa'||i,||' ');
insert into test100 values(i,'aa'||i,sysdate);
end loop;
--select count(*) into p_count from test100;
dbms_output.put_line(p_number||'行已被插入');
end;
/
⑤ oracle怎么查看存储过程报错信息
create or replace procere proc_test( strAge in string, strName in string, ret_code out string, v_error_message out string) is
begin
declare
strsql varcchar(1024);
v_error_desc varcchar(1024);
begin
v_error_desc :='student';
strsql :='select name from student where age=100';
execute immediate strsql using strAge ;
v_error_desc :='teacher';
strsql :='select age from teacher where name=jill';
execute immediate strsql using strName ;
ret_code:=0;
v_error_desc :='OK';
v_error_message:='OK';
EXCEPTION
WHEN OTHERS THEN
ret_code := sqlcode;
v_error_desc := '错误位置:' || v_error_desc;
v_error_message := sqlerrm;
rollback;
end;
end proc_cancel_digital_id;
⑥ 求高手 解答存储过程一直报错,看看哪错了
exec('if exists(select * from tempdb.dbo.sysobjects where name='''+@tmptable+''')
• drop table ‘+@tmptable) ---每次调用存储过程前先清除上次调用的结果
如果此语句执行成功,那么@tmptable就不存在了,后面的 select into '+@tmptable 就不能执行了
改成 delete from table ‘+@tmptable)
⑦ 怎样判断存储过程出错并捕捉错误信息
--通过sqlcode , sqlerrm 这两个内置变量来查看,例如:
DECLARE
--声明异常
some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition
v_ErrorCode NUMBER; -- Variable to hold the error message code
v_ErrorText VARCHAR2(200); -- Variable to hold the error message text
BEGIN
--...
--抛出异常
IF ( ... ) THEN --(括号内填抛出异常的条件)
RAISE some_kinds_of_err;
END IF;
--...
EXCEPTION
--捕捉异常
WHEN some_kinds_of_err THEN
/* do something to Handler the errors */
null;
--捕捉其他异常,并获得 捕获异常的内容
WHEN OTHERS THEN
v_ErrorCode := SQLCODE;
v_ErrorText := SUBSTR(SQLERRM, 1, 200);
-- Note the use of SUBSTR here.
dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);
END;
/
/**
sqlcode 就是错误代码
sqlerrm 就是sql错误信息。注意用substr来截取,否则输出很难看。
**/
⑧ 用存储过程往表里面插入数据,总是报错,还请大侠帮忙看下错在哪里
因为在编译前oracle会检查test表是否存在,如果不存在就提示无视图。
建议先重建一下这个表,每次操作前先执行drop table操作,然后在执行create table操作,这样就能通过编译。
代码如下:
CREATE OR REPLACE PROCEDURE UP_TEST(STRBEGIN VARCHAR2,
STREND VARCHAR2,
OCUR OUT SYS_REFCURSOR) IS
V_I INT;
V_J INT;
ISQL VARCHAR2(200);
DPTABLE VARCHAR2(200) := 'drop table test';
BEGIN
V_I := STRBEGIN;
V_J := STREND;
EXECUTE IMMEDIATE DPTABLE;
ISQL := 'create global temporary table test(sid int) on commit delete rows';
EXECUTE IMMEDIATE ISQL;
WHILE V_I <= V_J LOOP
INSERT INTO TEST VALUES (V_I);
END LOOP;
OPEN OCUR FOR
SELECT T.SID FROM TEST T;
END;
同时临时表就是一个缓存数据的表,在执行提交操作的时候就被清空了,没有必要每次都去新建然后删掉,他占用的存储空间很少。
⑨ plsql怎么看存储过程的错误(信息)日志
右键test,对存储过程进行测试!可以用变量记录错误信息,用异常捕捉来报告这个变量里记录的错误信息。
当然,也可以使用自己的错误日志表来记录具体错误原因,错误代码,方便查找错误原因。
⑩ ORACLE 存储过程报错 PLS-00103 求查错
其中username ,counter ,rolename 是传入参数,传入参数不能赋值,即第7、8行语句有问题,建议删除。
建议在plsql工具中编辑,方便。
(10)存储过程报错怎么看扩展阅读
存储过程(Stored Procere)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。