Bei dem, was Sie gezeigt haben, müssen Sie entweder die Klammern maskieren:
echo execute some_procedure\(123,234\) | sqlplus username/[email protected]
Oder schließen Sie Ihren Befehl in doppelte Anführungszeichen ein:
echo "execute some_procedure(123,234)" | sqlplus username/[email protected]
Beides stoppt die Shell, die versucht, die Klammern selbst zu interpretieren, was zu einem 'syntax error: '(' unexpected
oder ähnlicher Fehler. Es hat wirklich nichts mit Oracle zu tun, es ist nur, wie der Shell-Interpreter arbeitet, bevor er so weit kommt, den geechoten String an SQL*Plus weiterzuleiten.
Übrigens würde ich für solche Dinge im Allgemeinen ein Heredoc verwenden und vermeiden, die Anmeldeinformationen in die Befehlszeile zu schreiben, damit sie nicht über ps
sichtbar sind; zum Beispiel:
sqlplus -s /nolog <<!EOF
connect username/[email protected]
execute some_procedure(123,234)
exit
!EOF