BASH - Comillas simples dentro de comillas dobles para SQL Cláusula Where
Pregunta
Necesito enviar una cláusula WHERE de comparación de fecha con el formato correcto a un programa en la línea de comandos en bash.
Una vez que se encuentre dentro del programa llamado, la cláusula WHERE debería ser válida para Oracle y debería ser exactamente como esta:
highwater>TO_DATE('11-Sep-2009', 'DD-MON-YYYY')
El valor de la fecha está en una variable. He probado una variedad de combinaciones de citas y barras invertidas. En lugar de confundir el problema y dar ejemplos de mis errores, espero una respuesta prístina e impecable por Dreck.
Si tuviera que escribirlo en Perl, creo que la tarea tendría este aspecto:
$hiwaterval = '11-Sep-2009';
$where = "highwater>TO_DATE(\'$hiwaterval\', \'DD-MON-YYYY\')";
¿Cómo puedo lograr el mismo efecto en bash?
Solución
hiwaterval='11-Sep-2009'
where="highwater > TO_DATE('$hiwaterval', 'DD-MON-YYYY')"
opcionalmente agregar " exportar " antes de la configuración de la variable final, si va a ser visible en el lado del shell actual.
Otros consejos
¿Has intentado usar el uso de dobles tics? Al igual que Highwater > TO_DATE ('' 11-Sep-2009 '', 'DD-MON-YYYY' '). Sólo una sugerencia. No lo he probado.
Puedes asignar la cláusula where de esta manera:
export WHERECLAUSE=`echo "where highwater >TO_DATE('11-Sep-2009', 'DD-MON-YYYY')"`
(con backticks alrededor de la declaración de eco, no aparecen en mi editor aquí ...)
que funciona con un script de shell de la forma:
sqlplus /nolog <<EOS
connect $USERNAME/$PASSWD@$DB
select * from test $WHERECLAUSE
;
exit
EOS