sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo capturar el resultado del procedimiento almacenado a través de un script de shell?

La versión del bloque anónimo en el script de shell no se ejecutará como se muestra, porque no tiene una barra después del bloque para ejecutarlo . Si ejecuta eso, no obtiene ningún resultado. Si lo cambia para que tenga una barra oblicua:

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

entonces verás:

0

PL/SQL procedure successfully completed.

Ha mostrado la versión interactiva en SQL*Plus sin la barra también, pero debe haberla tenido para ver el resultado que mostró.

Si desea el cero, que parece provenir de un dbms_output llame a su procedimiento, en lugar de directamente desde su bloque anónimo; en una variable de shell a la que puede consultar más adelante, puede asignar la salida de heredoc a una variable:

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}

Tenga en cuenta que he añadido set feedback off por lo que no ve el PL/SQL procedure successfully completed línea. Ahora, cuando ejecutes eso, verás:

Got back MY_VAR as 0

y puedes hacer lo que necesites con ${MY_VAR} . Sin embargo, depende de lo que entiendas por 'capturar'.