Въпреки че не виждам нищо лошо в примера ви, чудя се дали не сте засегнат от стария BindByName проблем. По подразбиране ODP.NET свързва параметрите към заявката в реда, в който са добавени към колекцията, а не въз основа на името им, както искате. Опитайте да зададете BindByName до true във вашия OracleCommand обект и вижте дали това решава проблема.
Имах този проблем толкова много пъти, че използвам собствения си фабричен метод за създаване на команди, които автоматично задават това свойство на true за мен.
Класическа безполезна документация на Oracle тук