有关PL/SQL的异常捕获的两个相关问题: 出现的错误可以用:show error查看。我层经有过这样的经历,当时我是每执行一行变量加一,错误后,查看变量的值就知道错在哪了。不知道对于你是否可行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果负责任的话:1.打开此文本文件;2.一段一段阅读以后,用Ctrl+c从文本文件中剪切,用ctrl+v到sqlplus中执行;3.show error,有错时进行改正;4.反复2,3。这样做的优点:1.及时发现错误并改正,如果前面错了,后面可能一连串错;2.多做“举重”方面的练习,有助于dba的成长。 1。每个有DML语句作为一个块(BEGIN...END...EXCEPTION)2。写自己的EXCEPTION如:create or replace procedure backup_table_to_file /*功能:将ORACLE的任意表数据导出(标准格式) 编写:*/( v_tablename varchar2, /*需要导出的表名*/ v_path varchar2, /*服务器上导出数据文件的目录*/ v_string varchar2, /*服务器上导出数据文件的文件名*/ v_where varchar2, /*查询条件*/ v_flag varchar2, /*写数据文件的方式 w:重写 a:追加*/ outflag out varchar2 /*返回处理结果 0 成果、1 写入目录有误、2 表名有误、3 写入目录不能为空、4 写入文件方式有误、5 查询条件有误、6 其他错误*/)is file_handle utl_file.file_type; path_notinput_exception EXCEPTION;(用户自己定义的EXCEPTION) table_notfind_exception EXCEPTION; write_type_exception EXCEPTION; type ref_cursor_type is REF CURSOR; cursor_select ref_cursor_type; outputline varchar2(1000) ; select_cname varchar2(1000) ; w_flag varchar2(10); get_cname varchar2(1000) ; put_cname varchar2(1000) ; temp varchar2(1000) ; resault varchar2(1000) ; filepath varchar2(100) ; filename varchar2(100) ; i integer;begin。。IF (v_path is null) THEN --初始化服务器文件夹 RAISE path_notinput_exception; 抛出错误,截获方式和ORACLE自己的错误一样截获。3.请使用QUEST公司的TOAD工具。可以实现SQL语句的步进(STEP)。你要是闲的无聊也可以写一个。 呵呵,Lastdrop(空杯)兄好厉害啊还记得我上个帖子;没错我就是想在两个方案中选择。(程序读脚本,或是找到这样的工具)另外2、3楼两位说的也对,我们临时的方法就是请用户在Sql*Plus中执行.sql脚本,前面加上whenever sqlerror exit语句,并将打印spool到log文件中,这样不管wanring还是error都能看到,但现在想做一个程序来控制,并且请注意,这个脚本是不可控制的,会经常改变的,所以希望能有通用的方法来得到错误情况。4楼的方法我来试一下,请继续支持我这个菜鸟,谢谢! 泥可以建立一个中间表,然后在没执行一个独立的SQL脚本后,把这个SQL语句的编号和SQLERR记录到这个中间表中,然后等执行完毕后再来查看这个中间表,不就可以一目了然了~ 忘记说在脚本里面应该做的事情了:每个有SQL语句作为一个块(BEGIN...END...EXCEPTION),然后在异常处理的时候INSERT INTO TEMP(SQL_NO,SQL_ERR) VALUE(...); 呵呵水兄两个帖子都来了啊,不过我上面说了:这个脚本不是我写的而且太多,不能要求脚本中做过多处理,只能通过程序实现;(这样才有点挑战性么hehe) 要是这样的话,那泥的临时办法也不失为一个好的解决办法;要是非得通过程序来实现的话,泥就用PROC写个程序来实现:从文件读每个到分号的语句来依次执行,然后记录每句SQL执行的信息到表中即可。 偶们是已经用JDBC写了工具,但是不放心,比如人家不写分号写'/',注释怎么判断,等等问题,总之写出来也不放心,所以很希望能将脚本交给SQL*PLUS运行,自己的程序在监控是否有异常情况及异常语句。--看来这样是不是太难实现了。 求一个SQL语句 window下tnsname文件传到UNIX下多了“^M”字符 锁和事务 非常奇怪的crontab定时执行存储过程错误--谁有这样的经验。谢谢 請教PLS-00103錯誤 大侠!数据表很大 关于访问数据库访问的一个问题 请问oracle9i中service名和SID的区别 如何在SQL 语句中加入参数? oracle9i初装问题,请指教!谢谢!(2) 新手的问题! DBMS_JOB.SUBMIT调用带参数的过程时用变量怎么传参数?高手帮忙啊!
1.打开此文本文件;
2.一段一段阅读以后,用Ctrl+c从文本文件中剪切,
用ctrl+v到sqlplus中执行;
3.show error,有错时进行改正;
4.反复2,3。这样做的优点:
1.及时发现错误并改正,如果前面错了,后面可能一连串错;
2.多做“举重”方面的练习,有助于dba的成长。
2。写自己的EXCEPTION如:
create or replace procedure backup_table_to_file /*功能:将ORACLE的任意表数据导出(标准格式) 编写:*/
(
v_tablename varchar2, /*需要导出的表名*/
v_path varchar2, /*服务器上导出数据文件的目录*/
v_string varchar2, /*服务器上导出数据文件的文件名*/
v_where varchar2, /*查询条件*/
v_flag varchar2, /*写数据文件的方式 w:重写 a:追加*/
outflag out varchar2 /*返回处理结果 0 成果、1 写入目录有误、2 表名有误、3 写入目录不能为空、4 写入文件方式有误、5 查询条件有误、6 其他错误*/
)
is
file_handle utl_file.file_type;
path_notinput_exception EXCEPTION;(用户自己定义的EXCEPTION)
table_notfind_exception EXCEPTION;
write_type_exception EXCEPTION;
type ref_cursor_type is REF CURSOR;
cursor_select ref_cursor_type;
outputline varchar2(1000) ;
select_cname varchar2(1000) ;
w_flag varchar2(10);
get_cname varchar2(1000) ;
put_cname varchar2(1000) ;
temp varchar2(1000) ;
resault varchar2(1000) ;
filepath varchar2(100) ;
filename varchar2(100) ;
i integer;
begin
。。
IF (v_path is null) THEN --初始化服务器文件夹
RAISE path_notinput_exception; 抛出错误,截获方式和ORACLE自己的错误一样截获。
3.请使用QUEST公司的TOAD工具。可以实现SQL语句的步进(STEP)。你要是闲的无聊也可以写一个。
每个有SQL语句作为一个块(BEGIN...END...EXCEPTION),然后在异常处理的时候INSERT INTO TEMP(SQL_NO,SQL_ERR) VALUE(...);