Se connecter à sqlplus dans un script shell et exécuter des scripts SQL

j'en ai un .fichier sql, qui est un tas de oracle pl/sql commandes et je veux créer un script shell pour exécuter ces commandes.

Supposons que user/pass@server mes informations d'identification. Quel sera le script shell pour accomplir une telle tâche?

29
demandé sur codeforester 2012-04-23 13:31:36

4 réponses

Par exemple:

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
32
répondu NetBear 2012-04-23 09:40:04

est-ce que quelque chose de semblable à cela ne serait pas mieux, du point de vue de la sécurité?:

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 
17
répondu Blaine DeLancey 2013-04-19 15:39:53

Si vous souhaitez rediriger la sortie vers un fichier journal pour rechercher des erreurs ou quelque chose. Vous pouvez faire quelque chose comme cela.

sqlplus -s <<EOF>> LOG_FILE_NAME user/passwd@host/db
#Your SQL code
EOF
4
répondu darwinbaisa 2012-11-01 08:48:46

Ce doit gérer le problème:

  1. WHENEVER SQLERROR EXIT SQL.SQLCODE
  2. SPOOL ${SPOOL_FILE}
  3. $ RC retourne le code de sortie d'oracle
  4. chat à partir de $SPOOL_FILE explique l'erreur
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
2
répondu Rafał Sardaw 2014-12-23 18:29:21