Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como passar o parâmetro de entrada na chamada de procedimento armazenado a partir de uma única linha de comando


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