Oracle et l'automatisation Python
Oracle Database est omniprésent dans les environnements enterprise et hospitaliers. Automatiser des exports, des migrations ou des traitements Oracle avec AutomationSequence V8 évite de maintenir des scripts Python disparates, non versionables et sans gestion d'erreur centralisée.
AutomationSequence V8 intègre un connecteur Oracle basé sur cx_Oracle (ou son successeur python-oracledb), avec gestion du pool de connexions, des transactions et des curseurs nommés.
Une séquence JSON qui automatise Oracle est versionnable dans Git, chiffrable pour la distribution, et exécutable sur n'importe quelle machine avec le bon TNS — sans modifier une ligne de code.
Configurer la connexion Oracle
La connexion Oracle est configurée dans le vault chiffré d'AutomationSequence. Les credentials ne sont jamais en clair dans la séquence JSON :
# Stocker les credentials Oracle dans le vault
# Via l'interface : Outils → Vault → Ajouter un secret
# Dans la séquence JSON, référencer le vault
{
"type": "oracle_connect",
"dsn_vault_key": "ORACLE_PROD_DSN",
"pool_min": 2,
"pool_max": 10,
"encoding": "UTF-8",
"output_var": "oracle_conn"
}
Le vault utilise DPAPI (Windows) ou un chiffrement AES-256-GCM avec clé dérivée du fingerprint machine. Les credentials ne quittent jamais la machine.
Actions Oracle disponibles
oracle_connect— établit une connexion ou un pool. Stocke l'handle dans une variable.oracle_query— exécute un SELECT, retourne les lignes dans une variable.oracle_execute— exécute INSERT/UPDATE/DELETE/DDL avec ou sans COMMIT.oracle_batch_insert— insertion en masse viaexecutemany()avec bind variables.oracle_export_csv— exécute un SELECT et écrit directement en CSV/Excel.oracle_call_proc— appel de procédure stockée avec paramètres IN/OUT.oracle_disconnect— ferme proprement la connexion ou le pool.
Export de données
# Séquence : export mensuel d'activité hospitalière
[
{
"type": "oracle_query",
"connection": "{{oracle_conn}}",
"query": "SELECT pat_id, sejour_debut, sejour_fin, um_code FROM sejours WHERE TRUNC(sejour_debut,'MM') = TRUNC(SYSDATE,'MM')",
"output_var": "sejours_du_mois"
},
{
"type": "file_write_csv",
"data": "{{sejours_du_mois}}",
"path": "exports/sejours_{{date_YYYYMM}}.csv",
"encoding": "utf-8-sig"
}
]
Migration wm_concat → listagg
La fonction wm_concat a été supprimée dans Oracle 12c. AutomationSequence inclut une action de migration qui analyse et réécrit automatiquement les requêtes legacy :
# Requête Oracle 11g avec wm_concat (obsolète)
# SELECT wm_concat(nom) FROM patients GROUP BY service
# Action de migration automatique
{
"type": "oracle_migrate_query",
"input_sql": "{{legacy_query}}",
"rewrite_wm_concat": true,
"output_var": "migrated_query"
}
# Résultat : SELECT LISTAGG(nom, ',') WITHIN GROUP (ORDER BY nom)
# FROM patients GROUP BY service
Transactions complexes
[
{"type":"oracle_begin_transaction", "connection":"{{oracle_conn}}"},
{
"type": "oracle_execute",
"query": "UPDATE stock SET quantite = quantite - :qty WHERE ref = :ref",
"bind": {"qty": "{{quantite}}", "ref": "{{ref_produit}}"},
"on_error": "rollback_and_stop"
},
{"type":"oracle_commit", "connection":"{{oracle_conn}}"}
]
Mode asynchrone
Pour les longues requêtes (exports massifs, statistiques), l'action oracle_query_async s'exécute dans un thread séparé et stocke le résultat quand il est disponible, sans bloquer le reste de la séquence :
{
"type": "oracle_query_async",
"query": "SELECT * FROM pmsi_rsa WHERE annee = 2025",
"output_var": "pmsi_future",
"continue_sequence": true
}
# Actions suivantes s'exécutent pendant que la requête tourne
# Utiliser oracle_wait pour synchroniser si besoin
Sécurité et credentials
Les bonnes pratiques pour les credentials Oracle dans AutomationSequence :
- Vault chiffré obligatoire — jamais de mot de passe en clair dans le JSON, même en développement.
- Compte dédié par séquence — créer un utilisateur Oracle avec uniquement les droits nécessaires (SELECT sur les tables cibles, pas de DBA).
- Audit HMAC — chaque action Oracle est loguée avec horodatage et hash HMAC-SHA256 dans le journal d'audit immuable.
- tnsnames.ora local — configurer le TNS localement pour éviter de stocker host:port en clair dans la séquence.
Conclusion
AutomationSequence V8 transforme des scripts Oracle ad hoc en séquences versionables, chiffrables et auditables. La combinaison vault chiffré + journal HMAC + Plugin API Oracle couvre tous les cas d'usage enterprise, y compris les environnements HDS où la traçabilité des accès aux données est obligatoire.