【发布时间】:2011-12-02 01:20:16
【问题描述】:
我在这里遇到了一个问题,我已经花了几天时间来解决它..
我的解释会很长,但我尽量保持简短。
在我的 Oracle SQLdeveloper 中,我有一个包名 UT_BETWNSTR,其中包含:
create or replace
PACKAGE "UT_BETWNSTR"
IS
PROCEDURE ut_setup;
PROCEDURE ut_teardown;
PROCEDURE ut_betwnstr;
END UT_BETWNSTR;
包体是这样的:
create or replace
PACKAGE BODY "UT_BETWNSTR"
IS
PROCEDURE ut_setup IS
BEGIN
NULL;
END;
PROCEDURE ut_teardown
IS
BEGIN
NULL;
END;
PROCEDURE ut_BETWNSTR IS
BEGIN
utAssert.eq (
'Typical valid usage',
BETWNSTR(
STRING_IN => 'abcdefg',
START_IN => 3,
END_IN => 5)
,
'abc'
);
utAssert.isnull (
'NULL start',
BETWNSTR(
STRING_IN => 'abcdefg',
START_IN => NULL,
END_IN => 5)
);
utAssert.isnull (
'NULL end',
BETWNSTR(
STRING_IN => 'abcdefg',
START_IN => 2,
END_IN => NULL)
);
utAssert.isnull (
'End smaller than start',
BETWNSTR(
STRING_IN => 'abcdefg',
START_IN => 5,
END_IN => 2)
);
utAssert.eq (
'End larger than string length',
BETWNSTR(
STRING_IN => 'abcdefg',
START_IN => 3,
END_IN => 200)
,
'cdefg'
);
END ut_betwnstr;
END UT_BETWNSTR;
而函数名BETWNSTR是这样的:
create or replace
FUNCTION BETWNSTR (
string_in IN VARCHAR2,
start_in IN INTEGER,
end_in IN INTEGER
)
RETURN VARCHAR2
IS
l_start PLS_INTEGER := start_in;
BEGIN
IF l_start = 0
THEN
l_start := 1;
END IF;
RETURN (SUBSTR (string_in, l_start, end_in - l_start + 1));
END;
在我的 C 盘中,我放了一个文件名 BETWNSTR.sql,其中包含:
connect hr/hr
SET SERVEROUTPUT ON
EXEC UTPLSQL.TEST('BETWNSTR',Recompile_in=>FALSE);
exit
这是我的批处理文件(也在 C 盘中),名称为 try.bat,其中包含:
@sqlplus /nolog @C:\betwnstr.sql
echo %errorlevel%
if errorlevel 0 goto Success
echo You Got Error
:Success
echo Good Job!!
pause
好的,错误来了
当我运行 try.bat 时,它会返回我故意放的大 FAILURE 结果
PROCEDURE ut_BETWNSTR IS
BEGIN
utAssert.eq (
'Typical valid usage',
BETWNSTR(
STRING_IN => 'abcdefg',
START_IN => 3,
END_IN => 5)
,
'abc'
);
而不是
PROCEDURE ut_BETWNSTR IS
BEGIN
utAssert.eq (
'Typical valid usage',
BETWNSTR(
STRING_IN => 'abcdefg',
START_IN => 3,
END_IN => 5)
,
'cde'
);
我这样做是故意的,所以我希望 cmd 会回显:
You Got Error
因为我的代码中有错误..但是错误级别正在回显 0,这意味着它是成功的..
我知道,我的代码现在取决于 errorlevel..当 errorlevel 为 0 时,它会回显 Good Job..
我现在想要的是,当我运行批处理文件时,当它遇到错误时,我可以回显 You Got Error 消息..
当错误级别始终显示为 0 时,我如何回显“您遇到错误”消息..
简而言之,我想在不依赖错误级别的情况下回显错误消息..
我希望任何解决我问题的人都可以回答我的问题..
提前致谢!
【问题讨论】:
-
所以你的实际问题是“如何处理调用 sqlplus 的批处理文件中的错误,因为 sqlplus 没有在错误或失败时设置 ERRRORLEVEL?”
-
感谢您的评论,@KenWhite
标签: batch-file sqlplus