Versionen af den anonyme blok i shell-scriptet vil ikke blive udført som vist, fordi du ikke har et skråstreg efter blokken for at køre den . Hvis du kører det, får du intet output overhovedet. Hvis du ændrer den til at have en skråstreg:
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
så vil du se:
0
PL/SQL procedure successfully completed.
Du har også vist den interaktive version i SQL*Plus uden skråstreg, men du skal have haft det for at se det output, du viste.
Hvis du vil have nullet - som ser ud til at komme fra en dbms_output
indkald din procedure i stedet for direkte fra din anonyme blok - i en shell-variabel, du kan henvise til senere, kan du tildele output fra heredoc til en variabel:
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}
Bemærk, at jeg har tilføjet set feedback off
så du kan ikke se PL/SQL procedure successfully completed
linje. Når du nu kører det, vil du se:
Got back MY_VAR as 0
og du kan gøre, hvad du skal med ${MY_VAR}
. Det afhænger dog af, hvad du mener med 'fange'.