Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como capturar o resultado do procedimento armazenado por meio do script de shell?


A versão do bloco anônimo no shell script não será executada conforme mostrado, porque você não tem uma barra após o bloco para executá-lo . Se você executar isso, não obterá nenhuma saída. Se você alterá-lo para ter uma 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

então você verá:
0

PL/SQL procedure successfully completed.

Você mostrou a versão interativa no SQL*Plus sem a barra também, mas você deve ter tido isso para ver a saída que você mostrou.

Se você quer o zero - que parece vir de um dbms_output chame em seu procedimento, em vez de diretamente de seu bloco anônimo - n uma variável de shell que você pode consultar mais tarde, você pode atribuir a saída do heredoc a uma variável:
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}

Observe que adicionei set feedback off para que você não veja o PL/SQL procedure successfully completed linha. Agora, quando você executar isso, verá:
Got back MY_VAR as 0

e você pode fazer o que precisar com ${MY_VAR} . Depende do que você quer dizer com 'captura'.