AppleScript et Oracle pour Macintosh OS X
Affichage dans une feuille Microsoft Excel du résultat dune requête, déclenchée par SQL*Plus
RCI Informatique, Avril 2004
1 - Objectif
On souhaite partir dune requête, stockée sous forme de variable AppleScript, se connecter à la base Oracle, lancer cette requête, et afficher le résultat, dans une feuille Microsoft Excel.
2 - Donnée fournie et résultat obtenu
La donnée, cest le texte (SQL) dune requête :
select ename, job, sal from emp
Le résultat est est une feuille Microsoft Excel :

3 - Techniques utilisées
SQL*Plus, via lapplication Terminal, va continuer à être utilisé, mais en arrière plan.
On va mettre en oeuvre une autre capacité de SQL*Plus à écrire dans un fichier texte, le résultat, formaté sous forme de tableau HTML, dune requête.
On attendra que SQL*Plus ait complètement terminé la création du document HTML, en utilisant une synchronisation par la présence dun fichier dans le répertoire de résultat.
Enfin on scriptera Microsoft Excel, afin que cette application puisse ouvrir le tableau créé, en tant que feuille de calcul.
4 - Le texte AppleScript
-- Déclenchement d'une requête SQL simple avec Oracle 9i pour Macintosh OS X
-- sous forme d'un script Apple Script destiné à contrôler SQL*Plus
-- Ouverture du résultat de la requête dans une feuille Microsoft Excel
-- Copyright, tous droits réservés, RCI Informatique SA, 2004
-- www.rci-informatique.fr
-- www.index-informatique.net
-- Définition et initialisation d'une variable globale
global wT
set wT to ""
-- Le fichier temporaire de cet exemple
set MonFichier to "resultat_03.lst"
-- Positionnement dans le répertoire DBCreate
e("cd /Users/oracle/9iR2/orahome/DBCreate")
-- Activation des variables d'environnement Oracle
e(". DBENV")
-- Lancement de SQL Plus en se connectant avec SQL*Net TCP/IP
-- la commande à lancer est la suivante :
-- sqplus "scott/tiger@abmacipc"
e("sqlplus \"scott/tiger@abmacipc\"")
-- Effacement du fichier de sortie et du fichier de synchronisation
EffaceFichier(MonFichier)
EffaceFichier("fin.lst")
-- Définition du format de sortie de SQL*Plus, en tant que tableau HTML
e("SET MARKUP HTML ON SPOOL ON")
-- Définition de l'écriture dans un fichier "Spool" nommé resultat_03.lst
e("SPOOL /Users/temp/" & MonFichier)
-- lancement d'une requête renvoyant trois colonnes
e("select ename, job, sal from emp;")
-- Définition de l'écriture dans un fichier "Spool" nommé fin.lst
-- L'apparition de ce fichier nommé fin.lst permettra de savoir, depuis AppleScript, que le traitement
-- est terminé dans SQL*Plus
e("SPOOL off") -- fin du Spool SQL*Plus
e("SPOOL /Users/temp/fin")
-- Puis on quitte SQL Plus
e("exit")
-- Déclenchement de la suite de commandes Unix, en mode synchrone
doUnix(wT)
-- Synchronisation avec les commandes Unix, par attente de la présence du fichier "fin.lst"
AttenteFinSqlPlus()
-- Affichage du résultat de la requête à Oracle sous forme de feuille Microsoft Excel
tell application "Microsoft Excel"
Activate
-- Ouverture du document créé par SQL*Plus (en format Tableau HTML)
Open ("DisqueDur:Users:temp:" & MonFichier)
-- Suppression des deux lignes du début comportant le rappel de l'ordre SQL
tell Sheet 1
repeat 2 times
Delete Row 1
end repeat
end tell
end tell
-- on quitte l'application Terminal
QuitterTerminal()
-- Définition de la procédure d'envoi à Unix d'une ou plusieurs commandes
-- contenues dans la chaîne de caractères x
on doUnix(x)
tell application "Terminal"
do script x
end tell
end doUnix
-- Constitution d'une suite de commandes séparées par des retours à la ligne
on e(x)
-- return correspond à CHR(13)
set wT to wT & return & x
end e
-- Suppression d'un fichier du répertoire /Users/temp
on EffaceFichier(xFic)
-- Tous droits réservés, RCI Informatique SA, 2004
tell application "Finder"
tell folder "temp" of folder "Users" of startup disk
try -- Le fichier peut ne pas exister
delete file xFic
end try
end tell -- folder
end tell -- finder
end EffaceFichier
-- Boucle d'attente de la présence du fichier "fin.lst"
on AttenteFinSqlPlus()
-- Tous droits réservés, RCI Informatique SA, 2004
tell application "Finder"
tell folder "temp" of folder "Users" of startup disk
repeat
if exists file "fin.lst" then return
end repeat
end tell -- folder
end tell -- finder
end AttenteFinSqlPlus
-- Pour quitter l'application Terminal
on QuitterTerminal()
tell application "Terminal"
quit
end tell
end QuitterTerminal
Revenir au
sommaire AppleScript et Oracle

Tous droits réservés, RCI Informatique SA, 2004
rci@wanadoo.fr
www.rci-informatique.fr
www.index-informatique.net