Typically while selecting from a V$ table in a Unix script, I have to escape the “$” character as shown below:
sqlplus -s $sqlplus_command << EOF > backup_check_temp.txt select value from V\$RMAN_CONFIGURATION where NAME = 'RETENTION POLICY' ; exit; EOF
The above will successfully run the SQL and write the output in the spool file.
However, if instead of the output in a spool file, you want the output in a Unix variable for further processing, you would change the code to
export ret_period=`sqlplus -s $sqlplus_command << EOF select value from V\$RMAN_CONFIGURATION where NAME = 'RETENTION POLICY' ; EOF` if [ -z "$ret_period" ]; then export ret_period='Not found' fi
This will fail with:
+ export 'ret_period= select value from V where NAME = '\''RETENTION POLICY'\'' * ERROR at line 1: ORA-00942: table or view does not exist'
The reason is that the second method of coding results in two levels of interpretation, each of which requires the “$” character to be escaped. To get the code working, it has to be coded as follows (note the two “\\” escape characters):
export ret_period=`sqlplus -s $sqlplus_command << EOF select value from V\\$RMAN_CONFIGURATION where NAME = 'RETENTION POLICY' ; EOF` if [ -z "$ret_period" ]; then export ret_period='Not found' fi