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.


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


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}"

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.


De plus, l' ENDextrémité doit être alignée à gauche, sans espace devant.
Kusalananda
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.