J'ai un script KornShell (ksh) qui se connecte à SQL * Plus et exécute un script. Dans le script shell, je voudrais capturer le code d'état de l'instruction SQL exécutée. Actuellement il y a une erreur avec SQL et je suis incapable de le capturer en vérifiant $ ?. Comment puis-je capturer le code de succès ou d'erreur à partir de l'instruction SQL et le transmettre au script shell.Comment capturer un code de sortie SQLPlus dans un script shell?
Snippet du script 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
script SQL 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 C'est exactement ce dont j'avais besoin! Thx – AieshaDot
Je peux me tromper, mais cela ne fonctionnera pas pour les erreurs de connexion ou d'autres erreurs qui empêcheraient sqlplus d'exécuter le code sql. Je travaille ceci maintenant, et la meilleure solution que j'ai trouvée est de grep -c "ERROR" $ {LOG_FILE}>/dev/NULL le fichier journal que nous transmettons à la sortie de sqlplus pour la chaîne ERROR et de vérifier le code de retour de cela. Y a-t-il une meilleure solution? – Casey
ce lien ne fonctionne plus –