Answer
In Apps10, retrieving just the clean client-facing message became directly supported natively. On Apps9 and earlier, where that wasn't yet available, the message can be manually extracted from the raw SQLERRM text: pull out the numeric error code from the start of the string, then check Error_SYS.Is_Foundation_Error(sqlcode_) to determine the message's structure — an IFS Foundation-style error (formatted as LU.ErrorCode: message) needs the substring taken from after the second colon, while a plain Oracle-level error only needs the substring after the first colon. Trimming the result of that substring extraction gives you just the clean, client-facing message text without the surrounding stack trace.