Wersja anonimowego bloku w skrypcie powłoki nie zostanie wykonana, jak pokazano, ponieważ nie masz ukośnik po bloku, aby go uruchomić . Jeśli to uruchomisz, nie otrzymasz żadnych wyników. Jeśli zmienisz go na ukośnik:
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
wtedy zobaczysz:
0
PL/SQL procedure successfully completed.
Pokazałeś wersję interaktywną w SQL*Plus również bez ukośnika, ale musiałeś to mieć, aby zobaczyć wyniki, które pokazałeś.
Jeśli chcesz zero - które wydaje się pochodzić z dbms_output
wywołaj w swojej procedurze, a nie bezpośrednio z anonimowego bloku - w zmiennej powłoki, do której możesz odwołać się później, możesz przypisać wyjście dokumentu heredoc do zmiennej:
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}
Zauważ, że dodałem set feedback off
więc nie widzisz, że PL/SQL procedure successfully completed
linia. Teraz po uruchomieniu zobaczysz:
Got back MY_VAR as 0
i możesz zrobić, co tylko chcesz, dzięki ${MY_VAR}
. Zależy to jednak od tego, co rozumiesz przez „przechwytywanie”.