Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So übergeben Sie Eingabeparameter in gespeicherten Prozeduren, die von einer einzelnen Befehlszeile aus aufgerufen werden

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