2017-07-14 2 views
2

Dans Windows fichier .bat, je peux utiliser la redirection comme ceci:Comment envoyer des parenthèses dans un tube délimité par des parenthèses?

(echo connect/as sysdba 
echo select sysdate from dual; 
echo exit 
) | sqlplus -s /nolog 

et il fonctionnera (évidemment cet exemple ne fait rien). Comment puis-je passer parenthèse dans ce format pour une requête quelque chose comme:

(echo connect/as sysdba 
echo select trunc(sysdate) from dual; 
echo exit 
) | sqlplus -s /nolog 

sans souffler le tuyau?

+0

Échappe à la parenthèse fermante dans l'écho avec un caret '^)' – LotPings

Répondre

3

Vous devez ajouter trois carets avant de fermer la parenthèse.

(
echo connect/as sysdba 
echo select trunc(sysdate^^^) from dual; 
echo exit 
) | more 

Pourquoi?
Dans le premier cas, vous avez besoin d'un caret pour échapper à la parenthèse pour éviter que le bloc est fermé. Mais comme vous avez utilisé un tube, la construction complète est empaquetée et transférée vers une nouvelle commande exe.
Là, vous avez besoin d'une seconde fois un signe d'insertion, mais pour tranfser ce curseur, vous devez ajouter deux carets dans l'écho d'origine.
Par conséquent, vous avez besoin d'un total de trois.

+0

Parfait, merci beaucoup! – Cecil