Phiên bản của khối ẩn danh trong tập lệnh shell sẽ không được thực thi như được hiển thị vì bạn không có dấu gạch chéo sau khối để chạy nó . Nếu bạn chạy mà bạn không nhận được đầu ra nào cả. Nếu bạn thay đổi nó để có một dấu gạch chéo:
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
thì bạn sẽ thấy:
0
PL/SQL procedure successfully completed.
Bạn đã hiển thị phiên bản tương tác trong SQL * Plus mà không có dấu gạch chéo, nhưng bạn phải có phiên bản đó để xem kết quả mà bạn đã hiển thị.
Nếu bạn muốn số 0 - dường như đến từ dbms_output
gọi trong thủ tục của bạn, thay vì trực tiếp từ khối ẩn danh của bạn - với một biến shell mà bạn có thể tham khảo sau này, bạn có thể gán đầu ra của heredoc cho một biến:
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}
Lưu ý rằng tôi đã thêm set feedback off
vì vậy bạn không thấy quy trình PL/SQL procedure successfully completed
hàng. Bây giờ khi bạn chạy, bạn sẽ thấy:
Got back MY_VAR as 0
và bạn có thể làm bất cứ điều gì bạn cần với ${MY_VAR}
. Mặc dù vậy, nó phụ thuộc vào ý bạn muốn nói đến từ 'capture'.