La version du bloc anonyme dans le script shell ne sera pas exécutée comme indiqué, car vous n'avez pas une barre oblique après le bloc pour l'exécuter . Si vous exécutez cela, vous n'obtenez aucune sortie. Si vous le modifiez pour avoir une barre oblique :
sqlplus -silent [email protected] <<EOF
set serveroutput on
declare
DE_REC_COUNT number(10);
begin
DE_DUP_PROC ('T_MCL_30404_20150317_020','MCL','30404','FT',DE_REC_COUNT);
end;
/
EOF
alors vous verrez :
0
PL/SQL procedure successfully completed.
Vous avez également affiché la version interactive dans SQL*Plus sans la barre oblique, mais vous devez l'avoir eu pour voir la sortie que vous avez montrée.
Si vous voulez le zéro - qui semble provenir d'un dbms_output
appelez votre procédure, plutôt que directement depuis votre bloc anonyme - dans une variable shell à laquelle vous pourrez vous référer plus tard, vous pouvez affecter la sortie de l'heredoc à une variable :
MY_VAR=`sqlplus -silent [email protected] <<EOF
set serveroutput on
set feedback off
declare
DE_REC_COUNT number(10);
begin
DE_DUP_PROC ('T_MCL_30404_20150317_020','MCL','30404','FT',DE_REC_COUNT);
end;
/
EOF`
printf "Got back MY_VAR as %s\n" ${MY_VAR}
Notez que j'ai ajouté set feedback off
donc vous ne voyez pas la PL/SQL procedure successfully completed
ligne. Maintenant, lorsque vous exécutez cela, vous verrez :
Got back MY_VAR as 0
et vous pouvez faire tout ce dont vous avez besoin avec ${MY_VAR}
. Cela dépend de ce que vous entendez par "capturer".