Tôi có tập lệnh KornShell (ksh) đăng nhập vào SQL * Plus và thực thi tập lệnh. Trong kịch bản trình bao, tôi muốn nắm bắt mã trạng thái của câu lệnh SQL đã được thi hành. Hiện tại có lỗi với SQL và tôi không thể chụp được bằng cách kiểm tra $ ?. Làm cách nào để nắm bắt thành công hoặc mã lỗi từ câu lệnh sql và chuyển nó vào kịch bản lệnh shell.Làm cách nào để nắm bắt mã thoát của SQLPlus trong tập lệnh shell?
Snippet của kịch bản ksh:
sqlplus $JDBC_FBUID_U/[email protected]$JDBC_FBDB @${FBC_HOME}/FBCS003.sql ${outputfile}
if [ $? != 0 ]
then
msg_txt="The execution of Sql script /tmp/FBCS003.sql failed. Please investigate."
echo ${msg_txt}
echo ${msg_txt} | mailx -r ${fromemail} -s "FBCB003: The execution of Sql script /tmp/FBCS003.sql failed." ${toemail}
epage -n ${pagerdef} ${pagernum} "FBCB003: ${msg_txt}"
exit 1
fi
SQL script FBCS003.sql
-- Set SQLPlus variables.
SET NEWPAGE 0
SET WRAP OFF
SET LINESIZE 9999
SET ECHO OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET HEADING OFF
SET PAGESIZE 0
SET COLSEP |
SET TRIMSPOOL ON
SET TIMING ON
-- Open output file
-- The file path and name are passed from the calling script FBCS003.
spool &1
-- Main Select Statement
select
ct.fiscal_yr_no,
ct.acct_per_no,
ct.bus_unit_id,
ct.btch_file_seq_no,
ct.comm_tran_srce_cd,
ct.rec_no,
ct.rev_gl_acct_no,
ct.gl_prod_cd,
ct.prod_desc,
ct.paid_ir_no,
ct.srce_ir_no,
ct.ir_no_house_acct_rsn_txt,
ct.vndr_acct_ty_id,
ct.clnt_na,
ct.issr_na,
ct.clnt_na,
ct.issr_na,
ct.trd_da,
ct.setl_da,
ct.ord_ty_cd,
ct.actv_ty_cd,
ct.prin_amt,
ct.grs_comm_amt,
ct.net_comm_amt,
ct.vndr_prod_ty_cd,
ct.vndr_stmt_id
from fin.comm_tran ct
where ct.bus_unit_id = 'EJL'
and ct.vndr_acct_ty_id in
('11111111','222222222')
-- Execute sql statement.
/
-- Close output file
spool off
-- Exit SQL
exit
/
@ChristopheD Đây chính xác là những gì tôi cần! Thx – AieshaDot
Tôi có thể sai, nhưng điều này sẽ không làm việc cho các lỗi kết nối hoặc các lỗi khác mà sẽ dừng sqlplus từ thực thi mã sql. Tôi đang làm việc này ngay bây giờ, và giải pháp tốt nhất tôi đã tìm thấy là grep -c "ERROR" $ {LOG_FILE}>/dev/NULL tệp nhật ký chúng tôi đang tạo đầu ra sqlplus cho chuỗi ERROR và kiểm tra mã trả về từ đó. Có giải pháp nào tốt hơn không? – Casey
liên kết đó không còn hoạt động –