我知道如何通过单个命令行执行存储过程
echo execute some_procedure | sqlplus username/password@databasename
但我在程序中如何传递IN参数,实际上我的程序有两个参数。 我尝试了这个但没有工作
echo execute some_procedure(123,234) | sqlplus username/password@databasename
如果有人可以帮助我,那将会很棒。
答案 0 :(得分:2)
根据您所显示的内容,您需要逃避括号:
echo execute some_procedure\(123,234\) | sqlplus username/password@databasename
或用双引号括起你的命令:
echo "execute some_procedure(123,234)" | sqlplus username/password@databasename
要么阻止shell尝试解释parathenses本身,这会给你'syntax error: '(' unexpected
或类似的错误。它实际上与Oracle无关,它只是shell解释器的工作原理,然后才能将回显的字符串传递给SQL * Plus。
顺便说一句,我通常会使用heredoc来做这类事情,并且避免将凭据放在命令行上,因此它们不会通过ps
显示出来;例如:
sqlplus -s /nolog <<!EOF
connect username/password@databasename
execute some_procedure(123,234)
exit
!EOF