Création de Table Via SELECT avec SAS/ACCESS

ATTENTION : Ce contenu est DÉSACTIVÉ. Il est invisible pour les visiteurs.
Niveau de difficulté
Débutant
Publié le :
Le programme commence par nettoyer les tables de test existantes (`RDTAB78`, `CRTAB78A`, `CRTAB78B`) dans la bibliothèque `mydblib`. Il crée ensuite une table source (`mydblib.RDTAB78`) dans la base de données cible à l'aide d'un DATA Step avec des valeurs pour `x` et `y`. La première partie de l'exemple désactive l'exécution SQL directe (`options nodbidirectexec`) et utilise `PROC SQL` pour créer deux tables (`mydblib.CRTAB78A` et `mydblib.CRTAB78B`) en effectuant les jointures et filtres côté SAS©. Ces tables sont ensuite copiées dans la bibliothèque `WORK` sous les noms `noexeA` et `noexeB`. Après un nettoyage intermédiaire des tables dans `mydblib`, la seconde partie du script active l'exécution SQL directe (`options dbidirectexec`) et recrée les mêmes tables (`mydblib.CRTAB78A` et `mydblib.CRTAB78B`), mais cette fois en déléguant l'exécution des requêtes `CREATE TABLE AS SELECT` au SGBD sous-jacent. Les résultats de cette seconde approche sont copiés dans `WORK` sous les noms `exeA` et `exeB`. Enfin, le script utilise `PROC COMPARE` pour comparer les tables résultantes des deux approches (`work.noexeA` vs `work.exeA` et `work.noexeB` vs `work.exeB`) afin de s'assurer de leur équivalence, démontrant que les deux méthodes produisent les mêmes résultats, bien que l'approche 'pass-through' puisse être plus performante en fonction du SGBD.
Analyse des données

Type : CREATION_INTERNE


Les données source (`mydblib.RDTAB78`) utilisées pour la création des tables de test sont générées dynamiquement au début du script à l'aide d'un DATA Step. Bien que ces tables résident dans une bibliothèque (`mydblib`) qui est configurée pour pointer vers un système de gestion de base de données (DBMS) externe via SAS/ACCESS, le contenu initial est interne au script. Le script teste la capacité de SAS à manipuler des données et à créer de nouvelles tables dans ce DBMS.

1 Bloc de code
PROC DELETE
Explication :
Ce bloc supprime les tables de test `RDTAB78`, `CRTAB78A` et `CRTAB78B` de la bibliothèque `mydblib` si elles existent. Cela garantit un environnement propre pour chaque exécution du script et évite les erreurs de création de tables qui existent déjà.
Copié !
1 
2PROC DELETE
3DATA=mydblib.RDTAB78;
4 
5RUN;
6PROC DELETE
7DATA=mydblib.CRTAB78A;
8 
9RUN;
10PROC DELETE
11DATA=mydblib.CRTAB78B;
12 
13RUN;
14 
2 Bloc de code
DATA STEP Data
Explication :
Crée une table nommée `RDTAB78` dans la bibliothèque `mydblib`. Cette table est peuplée de 100 observations, où les variables `x` et `y` prennent des valeurs de 1 à 10. Cette table servira de source pour les opérations `CREATE TABLE AS SELECT` ultérieures.
Copié !
1DATA mydblib.RDTAB78;
2DO x = 1 to 10;
3DO y = 1 to 10;
4OUTPUT; END; END; RUN;
3 Bloc de code
PROC SQL Data
Explication :
Ce bloc désactive l'exécution SQL directe par le SGBD (`options nodbidirectexec`). Il utilise `PROC SQL` pour créer deux nouvelles tables (`CRTAB78A` et `CRTAB78B`) dans `mydblib` à partir de `RDTAB78`. SAS exécute la logique de la clause `SELECT` en interne, sans la déléguer au SGBD. `CRTAB78A` contient la variable `y` pour toutes les observations où `x` est supérieur à 5, et `CRTAB78B` contient les valeurs distinctes de `y` pour les mêmes conditions.
Copié !
1options nodbidirectexec;
2 
3PROC SQL noerrorstop;
4 
5 create TABLE mydblib.CRTAB78A as
6 select y from mydblib.RDTAB78
7 where x gt 5 order BY y;
8 
9 /* WITH IP TRIGGER */
10 create TABLE mydblib.CRTAB78B as
11 select distinct y from mydblib.RDTAB78
12 where x gt 5 order BY y;
13 
14 QUIT;
4 Bloc de code
DATA STEP Data
Explication :
Ces DATA Steps copient les tables `CRTAB78A` et `CRTAB78B`, qui ont été créées sans l'exécution SQL directe, vers la bibliothèque temporaire `WORK` sous les noms `noexeA` et `noexeB`. Cela permet de les conserver pour une comparaison ultérieure.
Copié !
1 
2DATA work.noexeA;
3SET mydblib.CRTAB78A;
4BY y;
5 
6RUN;
7DATA work.noexeB;
8SET mydblib.CRTAB78B;
9BY y;
10 
11RUN;
12 
5 Bloc de code
PROC DELETE
Explication :
Ce bloc supprime les tables `CRTAB78A` et `CRTAB78B` de la bibliothèque `mydblib`. Cette étape est nécessaire pour pouvoir recréer ces mêmes tables immédiatement après, mais cette fois avec l'option d'exécution SQL directe activée.
Copié !
1 
2PROC DELETE
3DATA=mydblib.CRTAB78A;
4 
5RUN;
6PROC DELETE
7DATA=mydblib.CRTAB78B;
8 
9RUN;
10 
6 Bloc de code
PROC SQL Data
Explication :
Ce bloc active l'exécution SQL directe par le SGBD (`options dbidirectexec`). Il utilise `PROC SQL` pour recréer les tables `CRTAB78A` et `CRTAB78B` dans `mydblib`. Contrairement au bloc précédent, SAS tente de déléguer l'exécution de la clause `SELECT` directement au SGBD sous-jacent. Cela peut potentiellement améliorer les performances en exploitant les capacités du SGBD.
Copié !
1options dbidirectexec;
2 
3PROC SQL noerrorstop;
4 
5 create TABLE mydblib.CRTAB78A as
6 select y from mydblib.RDTAB78
7 where x gt 5 order BY y;
8 
9 
10 
11 create TABLE mydblib.CRTAB78B as
12 select distinct y from mydblib.RDTAB78
13 where x gt 5 order BY y;
14 
15 QUIT;
7 Bloc de code
DATA STEP Data
Explication :
Ces DATA Steps copient les tables `CRTAB78A` et `CRTAB78B`, qui ont été créées avec l'exécution SQL directe, vers la bibliothèque temporaire `WORK` sous les noms `exeA` et `exeB`. Ces tables seront utilisées pour la comparaison finale.
Copié !
1 
2DATA work.exeA;
3SET mydblib.CRTAB78A;
4BY y;
5 
6RUN;
7DATA work.exeB;
8SET mydblib.CRTAB78B;
9BY y;
10 
11RUN;
12 
8 Bloc de code
PROC COMPARE
Explication :
Ce bloc utilise `PROC COMPARE` pour vérifier l'équivalence entre les tables créées sans (`noexeA`, `noexeB`) et avec (`exeA`, `exeB`) l'exécution SQL directe. L'option `ERROR` signale les différences, `BRIEFSUMMARY` fournit un résumé concis des résultats de la comparaison, et `NOTE` affiche les notes générées par la procédure. L'objectif est de confirmer que les deux méthodes aboutissent aux mêmes jeux de données.
Copié !
1PROC COMPARE base=work.noexeA
2 comp=work.exeA
3 error briefsummary note;RUN;
4 
5PROC COMPARE base=work.exeB
6 comp=work.exeB
7 error briefsummary note;RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : SAS SAMPLE LIBRARY, NAME: createTableAsSelect.sas, TITLE: Sample Programs, PRODUCT: SAS/ACCESS Software for Relational Databases, SYSTEM: z/OS, UNIX, WINDOWS, REF: SAS/ACCESS 9 for Relational Databases: Reference


Documentation liée

Aucune documentation spécifique pour cette catégorie.