Lancement procedure stocke oracle
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 (variablesORACLE_HOME,ORACLE_SID,PATH...) — un chemin d'exemple, à adapter à l'installation réelle. echo "... " | sqlplus utilisateur/mdp@serviceenvoie 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 danspspendant 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
sqlpluset 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.