Embora eu não consiga ver nada de errado com seu exemplo, gostaria de saber se você está sendo atingido pelo antigo
BindByName problema. Por padrão, o ODP.NET vincula parâmetros à consulta na ordem em que são adicionados à coleção, em vez de com base em seu nome, como você gostaria. Tente configurar BindByName para true no seu OracleCommand object e veja se isso resolve o problema. Eu tive esse problema tantas vezes que uso meu próprio método de fábrica para criar comandos que definem automaticamente essa propriedade como
true para mim. Documentação Oracle inútil clássica aqui