Connaissez-vous le jeu the incredible machine? Le but de ce jeu était de créer des réactions en chaîne très compliquées pour réaliser des objectifs simples comme percer un ballon ou mettre une balle dans un trou. Lorien travaille dans une société de prestation, il a eu la chance de croiser lors d'une de ses missions chez un client, un développeur qui rend hommage à "The Incredible Machine" en reproduisant le concept dans ses développements.
Voici une partie d'un script planifié toutes les nuits :
while : do sqlplus TestProgress.sql $COMPANY BATCH $PLINKCODE if [ $? -eq 0 ] then sleep 60 else echo "Stop" break fi done
Une boucle infinie qu'une réponse de la part de sqlplus peut interrompre via un break. Pas terrible, mais Lorien a connu pire, regardons de plus près le script sql.
whenever sqlerror exit sql.sqlcode rollback whenever oserror exit oscode rollback WHENEVER SQLERROR exit FAILURE DECLARE ok varchar2(1); XXX number := 0; BEGIN select decode(state,'322','1','0') into ok from oas_ledprogress where cmpcode = '&1' and usrname = '&2' and ledcode = '&3'; if ok = '1' then XXX := XXX / 0; else XXX := XXX / 1; end if; END; / exit;
Dans une boucle infinie, toutes les 60 secondes, un script vérifie la présence d'une entrée dans la base. Si elle n'est pas présente, il se termine normalement et recommence sa vérification 60 secondes plus tard. S'il trouve la valeur, il effectue une division par zéro, qui sort donc le script Oracle en erreur. Cette erreur récupérée permettra de sortir de la boucle infinie (fonctionnement normal) par un break et de continuer la fin du script "normalement".
D'après Wikipedia : La créativité d'un individu ou d'un groupe est sa capacité à produire sur commande en un temps donné une quantité donnée de solutions, d'idées ou de concepts permettant de réaliser de façon efficace et inattendue un effet ou une action.
Curieusement, dans notre domaine, le résultat est plus souvent inattendu qu'efficace...