Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để nắm bắt kết quả của thủ tục được lưu trữ thông qua shell script?

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Định dạng kết quả truy vấn số SQL với một số vị trí thập phân tùy ý

  2. Tạo chỉ mục phân cụm trong Oracle bằng cách sử dụng IOT? Sự hoang mang

  3. 40 câu hỏi bạn phải biết về R12.2

  4. Có câu lệnh SQL nào sẽ chia những gì sẽ có 2 cột dài thành nhiều cặp cột không?

  5. Báo cáo trường hợp với kiểu dữ liệu khác nhau