AppleScript et Oracle pour Macintosh OS X
Affichage dans un dialogue 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 un dialogue AppleScript, en masquant complètement lapplication Terminal.
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 obtenu dans un dialogue AppleScript :

3 - Techniques utilisées
SQL*Plus, via lapplication Terminal, va continuer à être utilisé, mais en arrière plan.
On va mettre en oeuvre la capacité de SQL*Plus à écrire dans un fichier texte, le résultat, formaté, dune requête.
On attendra que SQL*Plus ait complètement terminé la création du fichier résultat, en utilisant une synchronisation par la présence dun fichier dans le répertoire de résultat.
Enfin on utilisera la capacité du langage AppleScript à lire le contenu de fichiers.
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
-- Ecriture du résultat de la requête dans une boîte de dialogue AppleScript
-- 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 ""
-- 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("resultat_02.lst")
EffaceFichier("fin.lst")
-- Définition du format de sortie de SQL*Plus
e("SET NEWPAGE 0")
e("SET SPACE 0")
e("SET LINESIZE 80")
e("SET PAGESIZE 0")
e("SET ECHO OFF")
e("SET FEEDBACK OFF")
e("SET HEADING OFF")
-- Définition de l'écriture dans un fichier "Spool" nommé resultat_02.lst
e("SPOOL /Users/temp/resultat_02")
-- 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()
-- Lecture du fichier résultat
set w to LireFichier("resultat_02.lst")
-- Affichage dans une boîte de dialogue
display dialog w
-- 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
-- Obtention de tout le contenu d'un fichier
-- en utilisant les "additions standards" à AppleScript
on LireFichier(xFic)
-- Tous droits réservés, RCI Informatique SA, 2004
set wFic to open for access alias ("DisqueDur:Users:temp:" & xFic)
set L to get eof wFic
set w to read wFic from 1 for L
close access wFic
return w
end LireFichier
-- 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