Domanda

Devo inviare un confronto di date correttamente formattato la clausola WHERE a un programma sulla riga di comando in bash.

Una volta entrato nel programma chiamato, la clausola WHERE dovrebbe essere valida per Oracle e dovrebbe apparire esattamente così:

highwater>TO_DATE('11-Sep-2009', 'DD-MON-YYYY')

Il valore della data è in una variabile. Ho provato una varietà di combinazioni di virgolette e barre rovesciate. Piuttosto che confondere il problema e dare esempi dei miei errori, spero in una risposta precisa e incontaminata, non rovinata dal dreck.

Se dovessi scriverlo in Perl, l'incarico penserei che sia così:

$hiwaterval = '11-Sep-2009';
$where = "highwater>TO_DATE(\'$hiwaterval\', \'DD-MON-YYYY\')";

Come posso ottenere lo stesso effetto in bash?

È stato utile?

Soluzione

hiwaterval='11-Sep-2009'

where="highwater > TO_DATE('$hiwaterval', 'DD-MON-YYYY')"

facoltativamente aggiungi " export " prima dell'impostazione della variabile finale se deve essere visibile dalla shell corrente.

Altri suggerimenti

Hai provato a usare i doppi segni di spunta? Like highwater > TO_DATE ('' 11-Sep-2009 '', '' DD-MON-YYYY ''). Solo un suggerimento. Non l'ho provato.

Puoi assegnare la clausola where in questo modo:

export WHERECLAUSE=`echo "where highwater >TO_DATE('11-Sep-2009', 'DD-MON-YYYY')"`

(con i backtick attorno all'istruzione echo - non vengono visualizzati nel mio editor qui ...)

che funziona con uno script shell del modulo:

sqlplus /nolog <<EOS
connect $USERNAME/$PASSWD@$DB
select * from test $WHERECLAUSE
;
exit
EOS
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top