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