La versione del blocco anonimo nello script della shell non verrà eseguita come mostrato, perché non hai una barra dopo il blocco per eseguirlo . Se lo esegui non ottieni alcun output. Se lo modifichi per avere una barra:
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
quindi vedrai:
0
PL/SQL procedure successfully completed.
Hai mostrato la versione interattiva in SQL*Plus anche senza la barra, ma devi averlo avuto per vedere l'output che hai mostrato.
Se vuoi lo zero, che sembra provenire da un dbms_output
chiama nella tua procedura, piuttosto che direttamente dal tuo blocco anonimo - in una variabile di shell a cui puoi fare riferimento in seguito, puoi assegnare l'output di heredoc a una variabile:
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}
Tieni presente che ho aggiunto set feedback off
quindi non vedi la PL/SQL procedure successfully completed
linea. Ora quando lo esegui vedrai:
Got back MY_VAR as 0
e puoi fare tutto ciò di cui hai bisogno con ${MY_VAR}
. Dipende da cosa intendi per "catturare".