1 <exception> Statements
Provides access to documentation of the function.
2 <try-catch> Block
The body block of try contains the statements in which an exception may occur. The body block is always followed by a catch block, in which the exception that has occurred is captured. Exception control is used to manage errors produced, allowing the program to keep running after an exception occurs.
<try>
<body /> +
<catch /> +
</try>
Arguments | |||||
---|---|---|---|---|---|
Name | Type | Required | Unique | Nullable | Description |
Ebody | Block that contains the statements in which an exception may occur. | ||||
Ecatch | Block in which the exception that has occurred is captured. |
<xsql-script name='sample_error_isSQL'> <body> <try> <body> <!-- In this case, a controlled error of overlapping dates occurs. --> <update table='ctipoimp'> <column name='fecini'><date.mdy m='7' d='1' y='2010' /></column> <where>codimp = 'NOR' and fecfin = <mdy m='12' d='31' y='3000' /></where> </update> </body> <catch> <println>is SQL error? <error.isSQL/></println> </catch> </try> </body> </xsql-script>
2.1 <error>
2.1.1 error.isSQL
<error.isSQL />
Returns | |
---|---|
Type | Description |
boolean | Returns TRUE if the error is considered SQL, FALSE if it is not. |
<xsql-script name='sample_error_isSQL'> <body> <try> <body> <!-- In this case, a controlled error of overlapping dates has occurred. --> <update table='ctipoimp'> <column name='fecini'><date.mdy m='7' d='1' y='2010' /></column> <where>codimp = 'NOR' and fecfin = <mdy m='12' d='31' y='3000' /></where> </update> </body> <catch> <println>is SQL error? <error.isSQL/></println> </catch> </try> </body> </xsql-script>
Code for testing in various database managers.
<xsql-script name='test_issql'> <body> <!-- =========================================================== --> <!-- Test error.isSQL = --> <!-- true : Any constraint error. --> <!-- true : Any database error, i.e.: *while cursor open* --> <!-- false : User XSQL exception. --> <!-- false : Triggers custom exception with sdm_raise_msg --> <!-- --> <!-- Determines if error was caused by an SQL operation. --> <!-- --> <!-- --> <!-- Allows massive transactional processes, --> <!-- where individual transactions are made per document, --> <!-- to force the unconditional stopping of the process --> <!-- and display the SQL error message. --> <!-- --> <!-- Usually used at the end of a catch block. --> <!-- --> <!-- =========================================================== --> <!-- ==================================================== --> <!-- Error: user exception from XSQL Script. --> <!-- The error must be false. --> <!-- ==================================================== --> <try> <body> <exception>XSQL Exception Error</exception> </body> <catch> <set name='m_resp'><error.isSQL/></set> <println>XSQL exception error must be false: [<m_resp/>] error.message: [<error.message/>]</println> </catch> </try> <!-- ==================================================== --> <!-- Error: Check constraint. --> <!-- Other errors : --> <!-- Not enough space in chunk --> <!-- *while cursor open* --> <!-- The error must be true. --> <!-- ==================================================== --> <try> <body> <!-- ==================================================== --> <!-- TRY-BODY-START --> <!-- Need for postgresql : --> <!-- ==================================================== --> <if> <expr> <not><connection.isOnTransaction/></not> </expr> <then> <connection.begin/> </then> </if> <connection.savepoint/> <!-- Force error : 530: Check constraint (informix.c_ccuentas1) failed. --> <update table='ccuentas'> <column name='tipcta'>x</column> <where> placon = 'ES' and (code IN ('0000.000.00000', '0000.00000')) </where> </update> <!-- ==================================================== --> <!-- TRY-BODY-END --> <!-- Need for postgresql : --> <!-- ==================================================== --> <connection.releaseSavepoint/> </body> <catch> <!-- ==================================================== --> <!-- TRY-CATCH-START --> <!-- Need for postgresql : --> <!-- ==================================================== --> <connection.rollbackSavepoint/> <set name='m_resp'><error.isSQL/></set> <println>SQL error must be true: [<m_resp/>] error.message: [<error.message/>]</println> </catch> </try> <!-- ==================================================== --> <!-- Error user exception from trigger ! --> <!-- The error must be false. --> <!-- ==================================================== --> <set name='m_fecfin' type='date'>31-12-3000</set> <set name='m_fecfin_new' type='date'>01-06-2010</set> <try> <body> <update table='ctipoimp'> <column name='fecini'><m_fecfin_new/></column> <where> codimp = 'NOR' and fecfin = <m_fecfin/> </where> </update> </body> <catch> <set name='m_resp'><error.isSQL/></set> <println>Triggered exception error must be false: [<m_resp/>] error.message: [<error.message/>]</println> <println>error.sqlstate: [<error.sqlstate/>] error.sqlcode: [<error.sqlcode/>] </println> </catch> </try> </body> </xsql-script>
2.1.2 error.line
Returns the number of the line of code where the error occurred.
<error.line />
Returns | |
---|---|
Type | Description |
integer | Number of the line where the error occurred. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error on line: <error.line/></println> </catch> </try> </body> </xsql-script>
2.1.3 error.message
Returns the first error message. An exception can have two error messages.
<error.message />
Returns | |
---|---|
Type | Description |
string | First error message. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error at line: <error.line/></println> <println>.......in tag: <error.tag/></println> <println>........cause: <error.message/></println> </catch> </try> </body> </xsql-script>
2.1.4 error.message2
Returns the second error message.
<error.message2 />
Returns | |
---|---|
Type | Description |
string | Second error message. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error at line: <error.line/></println> <println>.......in tag: <error.tag/></println> <println>...root cause: <error.message/></println> <println>...node cause: <error.message2/></println> </catch> </try> </body> </xsql-script>
2.1.5 error.sqlcode
If the error has occurred in the database engine, the SQL error code is returned. Otherwise, null is returned.
<error.sqlcode />
Returns | |
---|---|
Type | Description |
string | Returns the SQL error code. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error on line: <error.line/></println> <println>.......in tag: <error.tag/></println> <println>...root cause: <error.message/></println> <println>...node cause: <error.message2/></println> <println>....sql code1: <error.sqlcode/></println> </catch> </try> </body> </xsql-script>
2.1.6 error.sqlcode2
If the error has occurred in the database engine, there may be a second SQL error code. If it does not exist or is not a database error, null will be returned.
<error.sqlcode2 />
Returns | |
---|---|
Type | Description |
string | Returns the second SQL error code. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error on line: <error.line/></println> <println>.......in tag: <error.tag/></println> <println>...root cause: <error.message/></println> <println>...node cause: <error.message2/></println> <println>....sql code1: <error.sqlcode/></println> <println>....sql code2: <error.sqlcode2/></println> </catch> </try> </body> </xsql-script>
2.1.7 error.sqlstate
If the error has occurred in the database engine, the status code of the SQL error is returned. Otherwise, null is returned.
<error.sqlstate />
Returns | |
---|---|
Type | Description |
string | Retorna el código de estado SQL del error. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error at line: <error.line/></println> <println>.......in tag: <error.tag/></println> <println>...root cause: <error.message/></println> <println>...node cause: <error.message2/></println> <println>....sql code1: <error.sqlcode/></println> <println>....sql code2: <error.sqlcode2/></println> <println>...sql state1: <error.sqlstate/></println> </catch> </try> </body> </xsql-script>
2.1.8 error.sqlstate2
If the error has occurred in the database engine, there may be a second status code of the SQL error. If it does not exist or is not a database error, null will be returned.
<error.sqlstate2 />
Returns | |
---|---|
Type | Description |
string | Returns the second status code of the SQL error. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error at line: <error.line/></println> <println>.......in tag: <error.tag/></println> <println>...root cause: <error.message/></println> <println>...node cause: <error.message2/></println> <println>....sql code1: <error.sqlcode/></println> <println>....sql code2: <error.sqlcode2/></println> <println>...sql state1: <error.sqlstate/></println> <println>...sql state2: <error.sqlstate2/></println> </catch> </try> </body> </xsql-script>
2.1.9 error.stackTrace
Returns the full trace of the error.
<error.stackTrace />
Returns | |
---|---|
Type | Description |
string | Returns the full trace of the error. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error at line: <error.line/></println> <println>.......in tag: <error.tag/></println> <println>...root cause: <error.message/></println> <println>...node cause: <error.message2/></println> <println>....sql code1: <error.sqlcode/></println> <println>....sql code2: <error.sqlcode2/></println> <println>...sql state1: <error.sqlstate/></println> <println>...sql state2: <error.sqlstate2/></println> <println>..stack trace: <error.stackTrace/></println> </catch> </try> </body> </xsql-script>
c:\jas>bin\ws-dbscript -file test.xml -user dpc -dbms demo_formacion Running script................: test Error at line: 7 .......in tag: insert ...root cause: Column (descri) not found in any table in the query (or SLV is undefined). ...node cause: RW[dbsrv2][demo_formacion][deister_prg] {1} ....sql code1: -217 ....sql code2: 0 ...sql state1: IX000 ...sql state2: null ..stack trace: > FROM [0] java.sql.SQLException: Column (descri) not found in any table in the query (or SLV is undefined). at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:3105) at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3419) at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2282) at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2202) at com.informix.jdbc.IfxSqli.executePrepare(IfxSqli.java:1093) at com.informix.jdbc.IfxResultSet.executePrepare(IfxResultSet.java:189) at com.informix.jdbc.IfxPreparedStatement.setupExecutePrepare(IfxPreparedStatement.java:193) at com.informix.jdbc.IfxPreparedStatement.<init>(IfxPreparedStatement.java:171) at com.informix.jdbc.IfxSqliConnect.prepareStatement(IfxSqliConnect.java:1964) at deister.webstudio.core.dbms.jdbc.DBPoolConnection.prepareStatement(DBPoolConnection.java:3642) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__prepareStatement(XSQLScriptRunner.java:8315) at deister.webstudio.core.xsql.script.functions.f_sql.function_insert.a(function_insert.java:356) at deister.webstudio.core.xsql.script.XSQLScriptRunner.a(XSQLScriptRunner.java:5668) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__exec_xsql_command(XSQLScriptRunner.java:5566) at deister.webstudio.core.xsql.script.commands.command_try.a(command_try.java:66) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__exec_xsql_command(XSQLScriptRunner.java:5546) at deister.webstudio.core.xsql.script.XSQLScriptRunner.a(XSQLScriptRunner.java:3591) at deister.webstudio.core.xsql.script.XSQLScriptRunner.run(XSQLScriptRunner.java:3508) at java.lang.Thread.run(Thread.java:595) SQL ERROR: -217 Column (% s) not found in any query table (or SLV not defined). SQL STATE: IX000 > FROM [1] SQLExceptionInfo: RW[dbsrv2][demo_formacion][deister_prg] {1} INSERT INTO cdaily (descri) VALUES (?) Program returned..............: <void > Execution completed...........: 1.528 secs. c:\jas>
2.1.10 error.tag
Returns the name of the tag where the error occurred.
<error.tag />
Returns | |
---|---|
Type | Description |
string | Name of the tag where the error occurred. |
<xsql-script> <body> <try> <body> <!-- An exception may occur in the database engine (column described does not exist). --> <insert table='cdiarios'> <column name='descri'>test</column> </insert> </body> <catch> <println>Error on line: <error.line/></println> <println>.......in tag: <error.tag/></println> </catch> </try> </body> </xsql-script>
3 Considerations
The try-catch section sends the stack trace of the error in the standard output, with a limit of 100 errors to avoid massive sending of error traces if a process generates an excessive number of exceptions. The standard output can be:
- The server log file, if a script is executed from a program (SQL Object).
- The console of
DBStudio
, if executed from this utility.
The format can be seen below:
<XSQL-EXCEPTION-CATCH> <STACKTRACE> <Root-Cause> <Root-Cause> ... </STACKTRACE> </XSQL-EXCEPTION-CATCH>
It has an ID
(the error counter), code
(the 20 lines of code closest to where the exception occurred), cause
(the stacktrace), and within it, the Root Cause
, SQLExceptionInfo
, etc.
<XSQL-EXCEPTION-CATCH id='1'> <STACKTRACE> error : java.sql.SQLException: Routine (a) cannot be resolved. server : 192.168.10.100 (titan.local) calltree : <embed> function : <embed> date : Tue May 23 11:11:27 CEST 2017 jobid : 1 user : jet dbms : demo_sports dict : tag : execute-procedure line : 5 code : <body> <execute-procedure name='a'/> </body> cause : deister.webstudio.core.xsql.script.XSQLScriptException: java.sql.SQLException: Routine (a) can not be resolved. at deister.webstudio.core.xsql.script.XSQLScriptRunner.prepareStatement(XSQLScriptRunner.java:6165) at deister.webstudio.core.xsql.script.functions.f_sql.function_execute_procedure.process(function_execute_procedure.java:205) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__eval_xsql_function(XSQLScriptRunner.java:4254) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__exec_xsql_command(XSQLScriptRunner.java:4074) at deister.webstudio.core.xsql.script.commands.command_try.process(command_try.java:64) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__exec_xsql_command(XSQLScriptRunner.java:4055) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__run_trappable(XSQLScriptRunner.java:1821) at deister.webstudio.core.xsql.script.XSQLScriptRunner.call(XSQLScriptRunner.java:1719) at deister.webstudio.core.xsql.script.XSQLScriptLoader.__execute(XSQLScriptLoader.java:924) at deister.webstudio.core.xsql.script.XSQLScriptLoader.execute(XSQLScriptLoader.java:827) at deister.axional.studio.core.test.xsql.test_xsql$1.beforeExecute(test_xsql.java:52) at deister.axional.server.jdbc.JDBCConnectionWrapper.executeScriptOrQuery(JDBCConnectionWrapper.java:2048) at deister.axional.server.jdbc.pool.JDBCPoolFactory.executeScriptOrQuery(JDBCPoolFactory.java:1307) at deister.axional.studio.core.test.xsql.test_exception.test1(test_exception.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: java.sql.SQLException: Routine (a) can not be resolved. at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3609) at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3934) at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2682) at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2598) at com.informix.jdbc.IfxSqli.executePrepare(IfxSqli.java:1403) at com.informix.jdbc.IfxPreparedStatement.f(IfxPreparedStatement.java:326) at com.informix.jdbc.IfxPreparedStatement.a(IfxPreparedStatement.java:306) at com.informix.jdbc.IfxPreparedStatement.<init>(IfxPreparedStatement.java:176) at com.informix.jdbc.IfxSqliConnect.h(IfxSqliConnect.java:6719) at com.informix.jdbc.IfxSqliConnect.prepareStatement(IfxSqliConnect.java:6746) at deister.axional.server.jdbc.impl.JDBCConnection.prepareStatement(JDBCConnection.java:521) at deister.axional.server.jdbc.JDBCConnectionWrapper.prepareReadOnlyStatement(JDBCConnectionWrapper.java:2558) at deister.webstudio.core.xsql.script.XSQLScriptRunner.prepareStatement(XSQLScriptRunner.java:6141) ... 36 more Caused by: java.sql.SQLException at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:413) at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3939) ... 47 more <Root cause>: class java.sql.SQLException java.sql.SQLException: Routine (a) can not be resolved. at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3609) at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3934) at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2682) at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2598) at com.informix.jdbc.IfxSqli.executePrepare(IfxSqli.java:1403) at com.informix.jdbc.IfxPreparedStatement.f(IfxPreparedStatement.java:326) at com.informix.jdbc.IfxPreparedStatement.a(IfxPreparedStatement.java:306) at com.informix.jdbc.IfxPreparedStatement.<init>(IfxPreparedStatement.java:176) at com.informix.jdbc.IfxSqliConnect.h(IfxSqliConnect.java:6719) at com.informix.jdbc.IfxSqliConnect.prepareStatement(IfxSqliConnect.java:6746) at deister.axional.server.jdbc.impl.JDBCConnection.prepareStatement(JDBCConnection.java:521) at deister.axional.server.jdbc.JDBCConnectionWrapper.prepareReadOnlyStatement(JDBCConnectionWrapper.java:2558) at deister.webstudio.core.xsql.script.XSQLScriptRunner.prepareStatement(XSQLScriptRunner.java:6141) at deister.webstudio.core.xsql.script.functions.f_sql.function_execute_procedure.process(function_execute_procedure.java:205) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__eval_xsql_function(XSQLScriptRunner.java:4254) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__exec_xsql_command(XSQLScriptRunner.java:4074) at deister.webstudio.core.xsql.script.commands.command_try.process(command_try.java:64) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__exec_xsql_command(XSQLScriptRunner.java:4055) at deister.webstudio.core.xsql.script.XSQLScriptRunner.__run_trappable(XSQLScriptRunner.java:1821) at deister.webstudio.core.xsql.script.XSQLScriptRunner.call(XSQLScriptRunner.java:1719) at deister.webstudio.core.xsql.script.XSQLScriptLoader.__execute(XSQLScriptLoader.java:924) at deister.webstudio.core.xsql.script.XSQLScriptLoader.execute(XSQLScriptLoader.java:827) at deister.axional.studio.core.test.xsql.test_xsql$1.beforeExecute(test_xsql.java:52) at deister.axional.server.jdbc.JDBCConnectionWrapper.executeScriptOrQuery(JDBCConnectionWrapper.java:2048) at deister.axional.server.jdbc.pool.JDBCPoolFactory.executeScriptOrQuery(JDBCPoolFactory.java:1307) at deister.axional.studio.core.test.xsql.test_exception.test1(test_exception.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Caused by: java.sql.SQLException at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:413) at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3939) ... 47 more <Root cause>: class deister.axional.server.jdbc.exception.SQLExceptionInfo <SQLExceptionInfo from='JDBCConnectionWrapper[[demo_sports@dbsrv1][informix:informix_dba][CORE-RW]-C00001]'> EXECUTE PROCEDURE a () </SQLExceptionInfo> </STACKTRACE> </XSQL-EXCEPTION-CATCH>