Since you are using Oracle PL/SQL, it has DBMS Output availability to write to logs and UTL_SMTP to send mails.
Do everything in PL/SQL procedure and make your life easier.
At least, do not use $?, this is an abuse of exit call and will not give results you might think it will.
Valid range is from 0 to 255, with 0 meaning success, everything else (some) type of error.
So using exit code variable filled with count from rows is just wrong, with all those pl/sql database utilities at your disposal.
Your exit &v_count statement needs to at least be run before the EOF closes the here document else this is left to the shell. It will run the shell exit in the background and then try to run the commandv_count, which probably won't be found. It will then confuse you.
I agree with Peasant that this probably isn't the way to go for non-trivial counts. Some shells might let you get away with it, but best to avoid it. Perhaps an SQL statement like prompt "v_count=&v_count" ; might work, but I haven't got a server I can test this statement on at all, so it will probably have an error in it, however if you can generate an obviously tagged output that tell you the value you need to pass, then perhaps you can get at that in the shell script part.
Maybe someone else can jump in here to suggest a clean way to pass the value out. I've got a few options but I'd expect better ones. Given you are writing all the output to a log file, you might get away with:-
Like I say, there's probably a better way.
Hi - Apologize for the delayed response. Here is the code which i tired where it passes the value to the shell script(in echo command) but not able to get the variable value in the IF condition. Am getting this output even the query output is 0.But at same time i tried with query with more than 0 records and am getting the output as expected.Since the value has leading spaces the IF condition is not matching with the values. Also i tried withcat test.out| sed -e 's/^[ \t]*//' IF condition works if the value is 0 but not for value>0 it returns with error No such file or dir Can you help me to get the proper trimming command for the values 0 or more than 0(max 4 digits)
The outvar=`cat test.out` is not great from a few things:-
The backticks ` are deprecated and can make complex statements difficult to read. You would be better to wrap such code with $( and )
The cat command is a waste of a process. You can just do this - outvar=$(<test.out)
The content of outvar will contain the entire file, so leading spaces, any headers (I see you've turned them off) and any end of line/end of file marker so the numerical comparison is a bit awkward. Your test in [[ & ]] uses the = operator, but this is a string comparison, and I'm not sure if this structure is supported in true ksh either. This is more of a bash syntax. ksh might also accept it, but I think it is only looking for file information instead. Your test (assuming that the file always just contains a numeric value) could probably be written as:
If it gives a bit of trouble, it is likely that the other characters read in from the file are the problem. You might try adding a line after the read such as typeset -i outvar=$outvar to see if that strips all the other things away and just assigns it the integer value. There are various typeset options for true ksh that have not transferred into bash or other pseudo-ksh so I'm hoping you have a true ksh. I can't test the syntax properly because I've not got a true ksh available so this bit is from memory of about 5 years ago.
Awesome! It's working as expected now by assigning the variable value in this approach.
Moderator's Comments:
Please wrap all code, data files, input & output/errors in CODE tags.
it makes them easier to read and preserves spaces for indenting or fixed width data.
Hi ,
I am trying to automate a gather stats in shell script
#!/usr/bin/ksh
export ORACLE_HOME=/orcl/app/oracle/product/11.2.0.1/db_1
export PATH="$PATH:$ORACLE_HOME/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ORACLE_HOME/lib32"
export TNS_ADMIN=/opt/netprobe/config... (1 Reply)
i have the following code inside a shell script .prog in oracle server when i call the program
DBMS_OUTPUT.PUT_LINE(x_return_status|| ln_rep_req_id);
will return 0 , it is very strange , i try to submit the concurrent request in oracle , and it can successfully executed, what am i missing ? i... (1 Reply)
Hi Gurus,
Want to execute a shell script from a oracle procedure and get the status of the same, any assistance in this regard will be appreciated.
proc_data.sh is script name which I want to execute from oracle procedure
It should work something like below
procedure test
begin... (1 Reply)
Hi everyone!
I'm new with Shell Scripting, and I have to do a shell script to call a procedure, which have 2 input parameters, the directory(from server) and the txt file (which have informations to update/insert in DB).
I have to create a shell script to execute that procedure for each txt... (5 Replies)
Here's a shell script snippet.....
cd $ORACLE_HOME/bin
Retval=`sqlplus -s <<eof
$TPDB_USER/april@$TPD_DBCONN
whenever SQLERROR exit 2 rollback
whenever OSERROR exit 3 rollback
set serveroutput on
set pages 999
var status_desc char(200)
var status_code... (1 Reply)
Hi ,
i have created an .sh file that has the following code:
#!/bin/ksh
sqlplus -s p1istuat/p1istuat@CWS_IST6 @Procedure_Execute.sql &
sqlplus -s p1istuat/p1istuat@CWS_IST6 << EOF
exit
EOF
The mentioned Procedure_Execute.sql file inside has the following code:
exec TEST;
... (5 Replies)
hai,
can anybody say how to call or to execute an oracle stored procedure in oracle from unix...
thanks in advance.... for ur reply....
by,
leo (2 Replies)