Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment capturer le résultat d'une procédure stockée via un script shell ?

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