Com o que você mostrou, você precisa escapar dos parênteses:
echo execute some_procedure\(123,234\) | sqlplus username/[email protected]
Ou coloque seu comando entre aspas duplas:
echo "execute some_procedure(123,234)" | sqlplus username/[email protected]
Qualquer um irá parar o shell tentando interpretar os próprios parênteses, o que lhe daria um erro de sintaxe de
'syntax error: '(' unexpected
ou erro semelhante. Na verdade, não tem nada a ver com o Oracle, é apenas como o interpretador de shell funciona, antes de chegar ao ponto de canalizar a string ecoada para o SQL*Plus. Aliás, eu geralmente usaria um heredoc para esse tipo de coisa e evitaria colocar as credenciais na linha de comando para que elas não fossem visíveis via
ps
; por exemplo:sqlplus -s /nolog <<!EOF
connect username/[email protected]
execute some_procedure(123,234)
exit
!EOF