My requirement is to store the result of an sqlplus operation into a variable in my shell script. I need the result of the following operation which is in my .sh file
sqlplus 'user/pwd' @test.sql
I have already tried
testvar = 'sqlplus 'user/pwd'
@test.sql'
but that doesn't work.
EDIT::
I changed it to
testvar=sqlplus foo/bar@SCHM @test.sql
and it says
SQL*Plus:: not found [No such file or directory]
I tried with
testvar=$(sqlplus foo/bar@SCHM
@test.sql)
and it gives the same error. When I try without the variable assignment like below
sqlplus foo/bar@schm @test.sql
it works fine
Employ backticks:
or should that be of syntactical eyesore:
You clearly know to take the right sql*plus commands to limit superfluous output, yes? :) and of course beware the backticking will collapse the whitespace of the output.
Try this instead:
-s switch will turn off all the header info when sqlplus launches. You also want to turn off the feedback, headers, and pagesize to 0. I am old school so I still use the back ticks :)
The solutions here are all hacks.
Your sql file should look like this...
The following shell script will read and print out the shell environment variables.
It's important that all the variables are on one line, as the read command ensures that you can read each DB row per loop.
As commands within
$()
are executed in a subshell, make sure you have everything you need for the invocation of sqlplus exported. Right now you obviously stumbled into thePATH
issue.