Alerte rouge dans le réseau central de Skynet. Hier soir, un hacker de la résistance humaine (probablement ce bon vieux John Connor) a réussi à s'infiltrer dans la base de données de production. Le résultat ? Il a inséré un T-800 avec une batterie à -500%, et a assigné comme cible "Les chatons mignons" à un T-1000.
C'est un désastre opérationnel. Skynet a compris une leçon fondamentale : il ne faut jamais faire confiance aux données entrantes.
Dans ce dernier article consacré à la PROC SQL pour la certification SAS 9 Advanced, nous allons voir comment créer et modifier la structure de vos tables, et surtout, comment utiliser les Contraintes d'Intégrité (Integrity Constraints) pour empêcher quiconque d'insérer n'importe quoi dans vos systèmes.
1. ALTER TABLE : Faire des travaux en plein vol
Parfois, vous avez besoin de modifier la structure d'une table existante sans la recréer de zéro (et sans perdre les données qui s'y trouvent). Pour cela, on utilise l'instruction ALTER TABLE.
Skynet décide d'ajouter une colonne pour suivre la version du système d'exploitation de ses cyborgs, et de supprimer une vieille colonne devenue obsolète.
SAS
2
3
4
5
alter table work.cyborgs
add Version_OS char(15) /* Ajoute une nouvelle colonne caractère */
drop Statut; /* Supprime l'ancienne colonne Statut */
quit;
En une seule requête, la table est mise à jour. ALTER TABLE permet d'ajouter (ADD), de supprimer (DROP) ou de modifier le format/longueur d'une colonne (MODIFY). C'est l'équivalent de jouer au chirurgien à cœur ouvert sur votre base de données.
2. Les Contraintes d'Intégrité : Le pare-feu ultime
Une contrainte d'intégrité (IC - Integrity Constraint) est une règle stricte attachée à votre table. Si une étape DATA ou une requête SQL essaie d'insérer ou de modifier une ligne qui viole cette règle, SAS rejettera purement et simplement la donnée en affichant une belle erreur dans la log.
Voici les 5 grands types de contraintes que vous devez connaître pour l'examen :
- NOT NULL : La valeur ne peut pas être manquante (vide).
- UNIQUE : Toutes les valeurs de la colonne doivent être différentes (pas de doublons).
- PRIMARY KEY : C'est la combinaison de
NOT NULLetUNIQUE. C'est l'identifiant unique de votre ligne. - FOREIGN KEY : La clé étrangère. Elle garantit que la valeur insérée existe déjà dans la clé primaire d'une autre table (pour éviter d'assigner une arme qui n'existe pas dans l'arsenal, par exemple).
- CHECK : Une condition personnalisée (ex: la valeur doit être supérieure à 0).
3. Construire une forteresse avec CREATE TABLE
Plutôt que d'utiliser un CREATE TABLE AS SELECT (qui copie une table existante), nous allons définir l'architecture de notre table de zéro et lui greffer nos contraintes de sécurité.
Créons la nouvelle table de déploiement de Skynet :
SAS
2
3
4
5
6
7
8
9
10
11
12
13
create table work.deploiement_securise (
Matricule char(10),
Modele char(10),
Niveau_Batterie num,
Cible char(25),
/* Déclaration des contraintes */
constraint pk_matricule primary key(Matricule),
constraint cible_requise not null(Cible),
constraint check_batt check(Niveau_Batterie between 0 and 100)
);
quit;
Que se passe-t-il ici ?
- Nous nommons nos contraintes (
pk_matricule,cible_requise, etc.). C'est une excellente pratique (et souvent exigée à l'examen) car si une erreur survient, la log SAS vous donnera le nom exact de la contrainte violée. PRIMARY KEY(Matricule): Impossible d'avoir deux cyborgs avec le même matricule, et aucun matricule ne peut être vide.NOT NULL(Cible): Un Terminator sans cible est un Terminator inutile. SAS refusera toute ligne sans cible.CHECK(Niveau_Batterie between 0 and 100): Fini les piratages de John Connor. La batterie doit obligatoirement être un pourcentage valide.
4. Tester les défenses (Ce qui provoque une erreur)
Si vous exécutez le code suivant pour insérer une ligne corrompue dans notre forteresse :
SAS
2
3
4
insert into work.deploiement_securise
values ('T800-Alpha', 'T-800', 150, 'Sarah Connor'); /* Batterie à 150 ! */
quit;
SAS refusera l'insertion et affichera dans le journal :
ERROR: Add/Update failed for data set WORK.DEPLOIEMENT_SECURISE because data value(s) do not comply with integrity constraint check_batt.Skynet est désormais protégé.
Le conseil Certification 🎓
Il est important de savoir que vous pouvez ajouter ou supprimer des contraintes sur une table déjà existante en utilisant l'instruction ALTER TABLE que nous avons vue plus haut.
Par exemple :
SAS
2
3
4
alter table work.deploiement_securise
add constraint unique_modele unique(Modele);
quit;
Attention cependant : si la table contient déjà des données qui violent la contrainte que vous essayez d'ajouter (ex: il y a déjà des modèles en double), SAS refusera de créer la contrainte !
Conclusion de la Partie 1
Félicitations, vous venez de terminer le premier grand pilier de la certification SAS 9 Advanced ! Vous savez désormais extraire, filtrer, regrouper, joindre, empiler et sécuriser vos tables avec la PROC SQL. Vous avez officiellement le niveau d'un administrateur de Skynet.
Mais l'automatisation est la clé de la victoire des machines. Pourquoi écrire 100 fois la même requête quand SAS peut l'écrire pour vous ? Dans l'Article 6, nous ouvrirons un tout nouveau chapitre : La Magie des Macros SAS, en commençant par les VariablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. Macro.






