Oracle
 sql >> Database >  >> RDS >> Oracle

Come acquisire il risultato della procedura memorizzata tramite script di shell?

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