Версията на анонимния блок в скрипта на обвивката няма да бъде изпълнена, както е показано, защото нямате наклонена черта след блока, за да го стартирате . Ако стартирате това, изобщо не получавате резултат. Ако го промените да има наклонена черта:
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
тогава ще видите:
0
PL/SQL procedure successfully completed.
Вие показахте интерактивната версия в SQL*Plus също без наклонената черта, но трябва да сте я имали, за да видите резултата, който показахте.
Ако искате нулата - която изглежда идва от dbms_output
извикайте във вашата процедура, а не директно от вашия анонимен блок - в променлива на обвивката, към която можете да се обърнете по-късно, можете да присвоите изхода на heredoc на променлива:
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}
Обърнете внимание, че добавих set feedback off
така че не виждате PL/SQL procedure successfully completed
линия. Сега, когато стартирате това, ще видите:
Got back MY_VAR as 0
и можете да правите каквото трябва с ${MY_VAR}
. Все пак зависи какво имате предвид под „улавяне“.