AppleScript et Oracle pour Macintosh OS X
Affichage dans une feuille Microsoft Excel du résultat d’une requête, déclenchée par SQL*Plus

RCI Informatique, Avril 2004

1 - Objectif

On souhaite partir d’une 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, c’est le texte (SQL) d’une requête :

select ename, job, sal from emp

Le résultat est est une feuille Microsoft Excel :







3 - Techniques utilisées

SQL*Plus, via l’application 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, d’une 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 d’un 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