Lorsqu'on utilise SAS© comme ETL pour copier des tables d'une base de données à une autre (par exemple de SQL Server vers Oracle), on se heurte souvent à une limitation technique irritante : SAS© tronque les noms de variables à 32 caractères.
Les bases de données modernes supportent des noms de colonnes beaucoup plus longs (128 caractères). Une colonne nommée Identity_Source_System_Modified_On dans SQL Server sera tronquée en Identity_Source_System_Modified_ lors de son passage dans SAS©, ce qui peut causer des conflits de noms ou une perte de sens.
Voici deux stratégies pour résoudre ce problème : la méthode moderne (si vous avez les bons outils) et la méthode manuelle (si vous utilisez une version standard de SAS©).
Méthode 1 : La solution "Propre" (PROC FEDSQL)
Si votre environnement SAS© est configuré avec PROC FEDSQL (souvent disponible avec SAS©/ACCESS ou SAS© Viya™), c'est la solution idéale.
Contrairement au moteur SAS© classique qui force tout à passer par le format de dataset SAS© (limite de 32 caractères), PROC FEDSQL agit comme un traducteur universel. Il lit les métadonnées de la source et les applique à la cible sans passer par les limitations internes des datasets SAS©.
Le Code
Pourquoi ça marche ?
FedSQL est conforme à la norme ANSI SQL. Il mappe les types de données et les noms de colonnes directement du moteur SQL Server vers le moteur Oracle. Si les deux bases supportent des noms de 128 caractères, FedSQL préservera ces noms intégralement.
Prérequis :
Méthode 2 : La solution "Système D" (PROC SQL Pass-Through)
Si vous n'avez pas FedSQL ou si l'initialisation échoue, vous devez utiliser SAS© Base. L'astuce repose sur un détail important : si SAS© tronque le nom de la variable, il conserve souvent le nom d'origine complet dans l'étiquette (Label) de la variable lors de l'import ODBC/OLEDB.
La stratégie se déroule en trois temps :
Copier la table (les noms seront tronqués).
Identifier les colonnes tronquées en comparant le nom et l'étiquette.
Générer dynamiquement une commande SQL ALTER TABLE pour renommer les colonnes dans Oracle après coup.
Étape 1 : Copier la table (avec troncature)
Étape 2 : Identifier les noms tronqués
Nous allons lire une ligne de la source dans une table temporaire (WORK.ONE) pour inspecter les métadonnées SAS©.
Étape 3 : Générer et exécuter le script de renommage
Nous utilisons la table système DICTIONARY.COLUMNS pour repérer les cas où NAME (tronqué) est différent de LABEL (complet).
Note importante sur la syntaxe Oracle :
La syntaxe exacte du ALTER TABLE peut varier selon votre version d'Oracle.
Assurez-vous que la version de votre base Oracle cible supporte les noms longs (Oracle 12c R2 et plus supportent 128 caractères ; les versions antérieures sont limitées à 30 caractères). Si votre Oracle est ancien (v11g), même cette méthode échouera et vous devrez raccourcir vos noms manuellement.
Résumé
| Méthode | Avantages | Inconvénients |
| PROC FEDSQL | Simple, robuste, pas de code complexe. Conserve les noms longs nativement. | Nécessite une licence spécifique et une configuration compatible. |
| PROC SQL + ALTER | Fonctionne avec SAS© Base standard. | Plus complexe à coder. Nécessite des droits ALTER sur la base cible. Dépend de la version Oracle. |