De versie van het anonieme blok in het shellscript wordt niet uitgevoerd zoals weergegeven, omdat je geen een schuine streep na het blok om het uit te voeren . Als je dat uitvoert, krijg je helemaal geen output. Als je het verandert in een schuine streep:
sqlplus -silent example@sqldat.com <<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
dan zie je:
0
PL/SQL procedure successfully completed.
Je hebt de interactieve versie in SQL*Plus ook zonder slash getoond, maar dat moet je gehad hebben om de output te zien die je liet zien.
Als je de nul wilt - die lijkt te komen van een dbms_output roep uw procedure op in plaats van rechtstreeks vanuit uw anonieme blok - n een shell-variabele waarnaar u later kunt verwijzen, kunt u de uitvoer van de heredoc toewijzen aan een variabele:
MY_VAR=`sqlplus -silent example@sqldat.com <<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}
Merk op dat ik set feedback off heb toegevoegd dus u ziet de PL/SQL procedure successfully completed lijn. Als je dat nu uitvoert, zie je:
Got back MY_VAR as 0
en je kunt doen wat je wilt met ${MY_VAR} . Het hangt er echter van af wat je bedoelt met 'vangen'.