2012-04-23 58 views

Trả lời

31

Ví dụ:

sqlplus -s admin/password << EOF 
whenever sqlerror exit sql.sqlcode; 
set echo off 
set heading off 

@pl_script_1.sql 
@pl_script_2.sql 

exit; 
EOF 
+5

Đây là khủng khiếp không an toàn, như bất cứ ai có thể xem mật khẩu trong khi "sqlplus" đang chạy bằng cách sử dụng "ps" lệnh. – JPaget

+0

Xin chào @ NetBear, tôi nghĩ bạn cần phải thực hiện 'sqlplus -s admin/password @ server' (phần' @ server' là bộ xử lý giao dịch trong trường hợp của tôi). – sturmer

4

Nếu bạn muốn chuyển hướng đầu ra vào một tập tin nhật ký để tìm kiếm các lỗi hoặc một cái gì đó. Bạn có thể làm một cái gì đó như thế này.

sqlplus -s <<EOF>> LOG_FILE_NAME user/[email protected]/db 
#Your SQL code 
EOF 
14

Sẽ không một cái gì đó tương tự như này được tốt hơn, an ninh-khôn ngoan ?:

sqlplus -s /nolog << EOF 
CONNECT admin/password; 

whenever sqlerror exit sql.sqlcode; 
set echo off 
set heading off 

@pl_script_1.sql 
@pl_script_2.sql 

exit; 
EOF 
+1

Điều này an toàn hơn điều gì? Điều gì làm cho nó an toàn hơn? Hãy thử chỉnh sửa bài đăng của bạn và thêm thông tin này. Hay bạn đang đặt câu hỏi? –

+7

Nó an toàn hơn vì tên người dùng/mật khẩu không hiển thị trong 'ps -ea' – Chaos

+0

Chaos, cảm ơn vì đã thêm điều đó - vâng, đó là ý định của tôi, và tôi không thấy câu trả lời của keith, vì vậy cảm ơn vì đã bắt được nó! –

1

này nên giải quyết vấn đề:

  1. bất cứ khi nào SQLERROR EXIT SQL.SQLCODE
  2. ống chỉ $ {SPOOL_FILE}
  3. $ RC trả lại mã thoát của oracle
  4. mèo từ $ SPOOL_FILE giải thích lỗi
SPOOL_FILE=${LOG_DIR}/${LOG_FILE_NAME}.spool 

SQLPLUS_OUTPUT=`sqlplus -s "$SFDC_WE_CORE" <<EOF 
     SET HEAD OFF 
     SET AUTOPRINT OFF 
     SET TERMOUT OFF 
     SET SERVEROUTPUT ON 

     SPOOL ${SPOOL_FILE} 

     WHENEVER SQLERROR EXIT SQL.SQLCODE 
     DECLARE 

     BEGIN 
      foooo 
     --rollback; 
     END; 
    /
    EOF` 

RC=$? 

if [[ $RC != 0 ]] ; then 

    echo " RDBMS exit code : $RC "  | tee -a ${LOG_FILE} 
    cat ${SPOOL_FILE}     | tee -a ${LOG_FILE} 

    cat ${LOG_FILE} | mail -s "Script ${INIT_EXE} failed on $SFDC_ENV" $SUPPORT_LIST 

    exit 3 

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