OracleDecimal има по-голяма прецизност от десетичната. Поради тази причина първо трябва да намалите точността. Забравете целия синтактичен анализ, използвайте имплицитно преобразуване. Опитайте нещо от типа на (непроверено):
decimal d = (decimal)(OracleDecimal.SetPrecision(oraReader.GetOracleDecimal(0), 28));