Avec ce que vous avez montré, vous devez soit échapper les parenthèses :
echo execute some_procedure\(123,234\) | sqlplus username/[email protected]
Ou placez votre commande entre guillemets :
echo "execute some_procedure(123,234)" | sqlplus username/[email protected]
L'un ou l'autre empêchera le shell d'essayer d'interpréter les parathenses lui-même, ce qui vous donnerait une erreur de syntaxe 'syntax error: '(' unexpected
ou erreur similaire. Cela n'a vraiment rien à voir avec Oracle, c'est juste comment fonctionne l'interpréteur de shell, avant qu'il n'aille jusqu'à diriger la chaîne en écho vers SQL*Plus.
Incidemment, j'utiliserais généralement un heredoc pour ce genre de chose et éviterais de mettre les informations d'identification sur la ligne de commande afin qu'elles ne soient pas visibles via ps
; par exemple :
sqlplus -s /nolog <<!EOF
connect username/[email protected]
execute some_procedure(123,234)
exit
!EOF