Lancement procedure stocke oracle

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Appel d'une procédure stockée Oracle depuis un script shell
Outil sqlplus
Voir aussi Oracle · Bash

Motif classique pour déclencher une procédure stockée Oracle depuis un script shell (par exemple depuis cron) : charger l'environnement Oracle, positionner les identifiants de connexion, puis envoyer l'appel PL/SQL à sqlplus via un pipe.

Script

. /home1/env/env.oracle
export BDD_USR=mon_utilisateur
export BDD_PWD=mon_mot_de_passe
export BDD_STR=${ENV}_mon_schema

echo "EXECUTE MA_PROCEDURE.NOM();" | sqlplus "${BDD_USR}/${BDD_PWD}@${BDD_STR}" > mylog.log
  • la première ligne (. /home1/env/env.oracle) source le profil d'environnement Oracle propre à l'installation (variables ORACLE_HOME, ORACLE_SID, PATH...) — un chemin d'exemple, à adapter à l'installation réelle.
  • echo "... " | sqlplus utilisateur/mdp@service envoie la commande PL/SQL sur l'entrée standard de sqlplus, qui se connecte, l'exécute puis se déconnecte — pratique pour un appel ponctuel scripté, mais le mot de passe apparaît en clair dans la commande et dans ps pendant l'exécution.

Sécurisation : éviter de placer un mot de passe en clair dans un script ou une variable d'environnement visible. Alternatives courantes :

  • un fichier de connexion externe protégé par ORACLE_WALLET (Oracle Wallet, connexion sans mot de passe explicite) ;
  • au minimum, un fichier de credentials à permissions restreintes (chmod 600), lu par le script plutôt que codé en dur ;
  • vérifier le code retour de sqlplus et le contenu du log pour détecter un échec — l'exemple ci-dessus ne fait aucune vérification après l'appel.

Vérifier le résultat

sqlplus retourne un code de sortie 0 même si la procédure a levé une exception PL/SQL non gérée avec WHENEVER SQLERROR non positionné — pour un script fiable, ajouter en tête de l'appel SQL :

WHENEVER SQLERROR EXIT SQL.SQLCODE
WHENEVER OSERROR EXIT FAILURE

et vérifier $? juste après l'appel à sqlplus dans le script.

Voir aussi

  • Oracle — administration Oracle
  • Bash — sourcing d'environnement, redirections