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.