如何从单命令行传递存储过程调用中的输入参数

时间:2015-08-04 17:47:33

标签: database oracle stored-procedures

我知道如何通过单个命令行执行存储过程

echo execute some_procedure | sqlplus username/password@databasename

但我在程序中如何传递IN参数,实际上我的程序有两个参数。 我尝试了这个但没有工作

echo execute some_procedure(123,234) | sqlplus username/password@databasename

如果有人可以帮助我,那将会很棒。

1 个答案:

答案 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