internal void Raise(string exceptionName) { if (String.IsNullOrEmpty(exceptionName)) { throw new ArgumentNullException("exceptionName"); } AssertNotFinished(); try { var statement = Statement; while (statement != null) { if (statement is PlSqlBlockStatement) { var block = (PlSqlBlockStatement)statement; if (block.Handles(exceptionName)) { block.FireHandler(this, exceptionName); return; } } statement = statement.Parent; } if (SystemErrorCodes.IsSystemError(exceptionName)) { var errorCode = SystemErrorCodes.GetErrorCode(exceptionName); throw new StatementException(errorCode, String.Format("Exception '{0}' explicitly risen from code", exceptionName)); } var declared = Request.Context.FindDeclaredException(exceptionName); if (declared == null) { throw new InvalidOperationException(String.Format("Exception '{0}' was not declared in the context.", exceptionName)); } throw new StatementException(declared.ErrorCode, String.Format("Declared exception '{0}' explicitly risen from code", exceptionName)); } finally { Terminate(); } }