Versi blok anonim dalam skrip shell tidak akan dieksekusi seperti yang ditunjukkan, karena Anda tidak memiliki garis miring setelah blok untuk menjalankannya . Jika Anda menjalankannya, Anda tidak mendapatkan output sama sekali. Jika Anda mengubahnya menjadi garis miring:
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
maka Anda akan melihat:
0
PL/SQL procedure successfully completed.
Anda telah menunjukkan versi interaktif di SQL*Plus tanpa garis miring juga, tetapi Anda harus memilikinya untuk melihat output yang Anda tunjukkan.
Jika Anda menginginkan nol - yang tampaknya berasal dari dbms_output
panggil prosedur Anda, daripada langsung dari blok anonim Anda - dengan variabel shell yang dapat Anda rujuk nanti, Anda dapat menetapkan output heredoc ke variabel:
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}
Perhatikan bahwa saya telah menambahkan set feedback off
jadi Anda tidak melihat PL/SQL procedure successfully completed
garis. Sekarang ketika Anda menjalankannya, Anda akan melihat:
Got back MY_VAR as 0
dan Anda dapat melakukan apa pun yang Anda perlukan dengan ${MY_VAR}
. Itu tergantung apa yang Anda maksud dengan 'tangkap'.