Oracle 使用Ant构建PL/SQL包时需要获取错误/警告
使用下面的代码,我可以编译一个PL/SQL包Oracle 使用Ant构建PL/SQL包时需要获取错误/警告,oracle,ant,Oracle,Ant,使用下面的代码,我可以编译一个PL/SQL包 <exec executable="sqlplus" failonerror="true" errorproperty="exit.status" logError="true"> <arg line="MyUser/MyPassword@MyDatasource"/> <arg value='@C:\public\data_svn\trunk\DataBase_Scripts\packages\FSMP
<exec executable="sqlplus" failonerror="true" errorproperty="exit.status" logError="true">
<arg line="MyUser/MyPassword@MyDatasource"/>
<arg value='@C:\public\data_svn\trunk\DataBase_Scripts\packages\FSMP_PACKAGE.pkb'/>
</exec>
但是如果它有错误,它仍然会记录一个成功的构建。我试图从exec中获取错误代码,但什么也得不到——或者0,成功与否
我也试过了
每当SQLERROR退出SQL.code时,代码>
和
每当SQLERROR退出警告SQL.code时代码>
但没有区别
有什么想法吗?经过更多的搜索和实验,我找到了解决方案。
基本上,您必须使用'where SQLERROR EXIT WARNING SQL.CODE'并通过查询用户错误表来捕获错误。基于
请注意,每当SQLERROR EXIT WARNING SQL.code
时,都不会得到分号,因为它是SQLPlus指令,并且包之间需要有斜杠。
脚本将在出现第一个错误时停止,但我们将其用于测试部署,因此包应该在我们的开发数据库中工作。我不懂java,也不确定是否理解您的要求,但是:编译包总是没有错误。编译错误不是SQL或PL/SQL异常。也许您可以分析输出消息?类似的问题:这不是Java问题,也不是PL/SQL创建错误消息的问题。我们正在运行一个构建PL/SQL包的Ant脚本。如果包构建失败,Ant脚本仍会发出“success”。
<target name="RunExec">
<exec executable="sqlplus" failonerror="true" errorproperty="exit.status" logError="true">
<arg line="domain/secret@datasource"/>
<arg value='@${buildPackage.sql}'/>
</exec>
WHENEVER SQLERROR EXIT WARNING SQL.CODE
@C:\packages\FSMP_PACKAGE.pks
BEGIN
DECLARE
NUM INTEGER;
ERROR_TEXT USER_ERRORS.TEXT%TYPE;
BEGIN
SELECT Count(*) INTO NUM FROM USER_ERRORS WHERE Type
= 'PACKAGE' AND NAME = 'FSMP_PACKAGE';
If num > 0 Then
SELECT TEXT INTO ERROR_TEXT FROM USER_ERRORS WHERE
Type = 'PACKAGE' AND NAME = 'FSMP_PACKAGE';
RAISE_APPLICATION_ERROR(-20000, ERROR_TEXT, True);
End IF;
END;
END;
/
@C:\packages\FSMP_PACKAGE.pkb
BEGIN
DECLARE
NUM INTEGER;
ERROR_TEXT USER_ERRORS.TEXT%TYPE;
BEGIN
SELECT Count(*) INTO NUM FROM USER_ERRORS WHERE Type
= 'PACKAGE BODY' AND NAME = 'FSMP_PACKAGE';
If num > 0 Then
SELECT TEXT INTO ERROR_TEXT FROM USER_ERRORS WHERE
Type = 'PACKAGE BODY' AND NAME = 'FSMP_PACKAGE';
RAISE_APPLICATION_ERROR(-20000, ERROR_TEXT, True);
End IF;
END;
END;
/