Bash - Aspas simples dentro de aspas duplas para SQL onde cláusula
Pergunta
Eu preciso enviar uma comparação data formatado corretamente cláusula WHERE para um programa na linha de comando em bash.
Uma vez que começa dentro do programa chamado, a cláusula WHERE deve ser válido para Oracle, e deve olhar exatamente como isto:
highwater>TO_DATE('11-Sep-2009', 'DD-MON-YYYY')
O valor de data é em uma variável. Eu tentei uma variedade de combinações de citações e barras invertidas. Ao invés de confundir a questão e dar exemplos de meus erros, eu estou esperando por uma resposta precisa intocada maculado por dreck.
Se eu fosse escrever isso em Perl, a atribuição eu acho parecido com este:
$hiwaterval = '11-Sep-2009';
$where = "highwater>TO_DATE(\'$hiwaterval\', \'DD-MON-YYYY\')";
Como faço para conseguir o mesmo efeito em bash?
Solução
hiwaterval='11-Sep-2009'
where="highwater > TO_DATE('$hiwaterval', 'DD-MON-YYYY')"
opcionalmente adicionar "exportação" antes definição da variável final, se é para ser ourside visível o shell atual.
Outras dicas
Você já tentou usar usando carrapatos duplas? Como highwater> TO_DATE ( '' 11-Sep-2009 '', '' DD-MON-YYYY ''). Apenas uma sugestão. Eu não tentei-lo.
Você pode atribuir a cláusula onde assim:
export WHERECLAUSE=`echo "where highwater >TO_DATE('11-Sep-2009', 'DD-MON-YYYY')"`
(com acentos graves em torno da declaração de eco - eles não estão aparecendo no meu editor aqui ...)
que trabalha com um shell script da forma:
sqlplus /nolog <<EOS
connect $USERNAME/$PASSWD@$DB
select * from test $WHERECLAUSE
;
exit
EOS