OpenEdge SQL stored procedures use standard Java try/catch constructs to process exceptions.

Any errors in SQL statement execution result in the creation of a DhSQLException class object. When OpenEdge SQL detects an error in an SQL statement, it throws an exception. The stored procedure should use try/catch constructs to process such exceptions. The getDiagnostics method of the DhSQLException class object provides a mechanism to retrieve different details of the error.

The getDiagnostics method takes a single argument whose value specifies which error message detail it returns. The following table shows the explanations of the getDiagnostics error-handling options.

Table 1. getDiagnostics error-handling options
Argument value Returns
RETURNED_SQLSTATE
The SQLSTATE returned by execution of the previous SQL statement
MESSAGE_TEXT
The condition indicated by RETURNED_SQLSTATE
CLASS_ORIGIN
Not currently used; always returned null
SUBCLASS_ORIGIN
Not currently used; always returned null

The following example shows an excerpt from a stored procedure that uses DhSQLException.getDiagnostics.

try
{     SQLIStatement insert_cust = new SQLIStatement (
     "INSERT INTO customer VALUES (1,2) ");
}catch (DhSQLException e)
{     errstate = e.getDiagnostics (DhSQLException.RETURNED_SQLSTATE) ;
     errmesg  = e.getDiagnostics (DhSQLException.MESSAGE_TEXT) ;
          .
          .
          .
}

Stored procedures can also throw their own exceptions by instantiating a DhSQLException object and throwing the object when the procedure detects an error in execution. The conditions under which the procedure throws the exception object are completely dependent on the procedure.

The following example illustrates using the DhSQLException constructor to create an exception object called excep. It then throws the excep object under all conditions.

CREATE PROCEDURE sp1_02()
BEGIN
// raising exception 
     DhSQLException excep =
        new DhSQLException(777,new String("Entered the tst02 procedure"));
     if (true)
     throw excep;
END