2009-09-09 33 views
8

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 
/

Trả lời

12

Bạn đã cố gắng sử dụng

whenever sqlerror exit sql.sqlcode 

trong kịch bản sql của bạn? (Xem thêm this link)

+0

@ChristopheD Đây chính xác là những gì tôi cần! Thx – AieshaDot

+3

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

+1

liên kết đó không còn hoạt động –

1

Thoát khỏi file sql với

exit sql.sqlcode; 

chụp nó trong vỏ với $?

Các vấn đề liên quan