Affectation de la sortie d'une requête SQL à une variable

10

Je me connecte à la base de données Oracle et lance une requête et attribue la sortie à la variable Mais quand je fais écho à la valeur de la variable, elle n'est pas imprimée correctement.

count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off;
           select max(cust_id) from cutomers
           exit;
           END`
           echo $count

La requête renvoie un résultat correct lorsqu'elle est déclenchée sur la base de données. Mais la variable "count" a une valeur incorrecte.

suni
la source
1
veuillez vérifier si l'indentation correspond à votre code d'origine, maintenant après avoir corrigé le formatage. (Si correspond, alors c'est faux. Vous ne pouvez pas mettre en retrait le délimiteur de fermeture des documents ici comme ça.)
manatwork
Qu'est-ce qui est affiché en mode normal et quelle est la valeur de count lors de l'attribution?
ott--

Réponses:

13

Le mot de fin ici-doc doit être le seul caractère de la ligne: pas de retrait autorisé. Aussi, utilisez $()au lieu de backticks - ils sont emboîtables.

count=$(sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
       set pagesize 0 feedback off verify off heading off echo off;
       select max(cust_id) from cutomers
       exit;
END
)
echo $count

http://www.gnu.org/software/bash/manual/bashref.html#Here-Documents

glenn jackman
la source
2
Vous pouvez également utiliser des onglets avec la <<-ENDnotation. Pas d'espaces, TABS!
slm
1
OUTPUT=$( ${OracleClientHome}/sqlplus -S user/pass@database <<EOF
set pagesize 0 linesize 32767 feedback off verify off heading off echo off
select a1.id  || '|' ||
       a1.stmt_begin_date  || '|' ||
       a1.stmt_end_date  || '|' ||
       a1.status  || '|' ||
       a1.total_recs 
from acct_stmt_file a1
 where a1.actp_cd = 'HSA'
   and a1.stmt_begin_date =trunc(sysdate);
exit;
EOF
)

echo -e "\n${OUTPUT}"
Tathagata Mukherjee
la source
1
Pourquoi? Je pense que ce serait mieux si vous partagiez vos idées avec la communauté, pas seulement cet extrait de script.
peterh
-1
count=`sqlplus -s $configuser/$configpass@$ORACLE_SID <<END
           set pagesize 0 feedback off verify off heading off echo off
           select max(cust_id) from cutomers;
           exit;
           END`

           echo $count

Vous devez utiliser le point-virgule au bon endroit.

Emaya
la source
De plus, l' ENDextrémité doit être alignée à gauche, sans espace devant.
Kusalananda