Tous les articles par Mr COBOL

CICS – ENDBR

La commande ENDBR est utilisée pour terminer la fonction de navigation en cours.

Syntaxe:

Vous trouverez ci-dessous la syntaxe de la commande ENDBR.

EXEC CICS ENDBR
   FILE('nom-fichier')
   REQID(valeur-donnee)
   SYSID(nom-systeme)
END-EXEC.

Voyons les paramètres utilisés dans la commande ENDBR.

  • FICHIER(nom-fichier)
    Spécifie le nom du fichier auquel accéder.
  • REQID(valeur-donnee)
    Spécifie en tant que valeur binaire demi-mot un identificateur de requête unique pour un parcours, utilisé pour contrôler plusieurs opérations de parcours sur un fichier. Si cette option n’est pas spécifiée, une valeur par défaut de zéro est supposée.
  • SYSID(nom-systeme)
    Spécifie le nom du système vers lequel la demande est dirigée.

CICS – RESETBR

La commande RESETBR est utilisée pour réinitialiser notre point de départ au milieu d’une navigation. fondamentalement, Il établit un nouveau point de navigation.

Pour redémarrer la navigation à partir d’un emplacement de fichier différent. Ceci est similaire à un ENDBR suivi d’un STARTBR, mais est plus efficace car les ressources VSAM seront réaffectées plutôt que désaffectées et réaffectées.

Syntaxe:

Vous trouverez ci-dessous la syntaxe de la commande RESETBR.

EXEC CICS RESETBR
   FILE('nom-fichier')
   RIDFLD(zone-donnee)
   GTEQ
END-EXEC.

Voyons les paramètres utilisés dans la commande RESETBR.

  • FILE(nom-fichier)
    Spécifie le nom du fichier auquel accéder.
  • RIDFLD(zone-donnee)
    Spécifie le champ d’identification de l’enregistrement. Il porte le nom de la zone de données contenant la clé de l’enregistrement que l’on veut lire.

CICS – Présentation

IBM a lancé la première version de CICS en 1968.

Il s’agit d’un système de contrôle de communication de base de données/données où un programme d’application peut se concentrer sur le traitement de l’application sans se soucier du système d’exploitation, du matériel et autres. Initialement, CICS était au niveau macro et a ensuite été mis à niveau au niveau commande.

Qu’est-ce que le CICS ?

CICS (Customer Information Control System) est un système IBM de base de données/communication de données (DB/DC). CICS facilite l’envoi, la réception et le traitement des données grâce à l’interaction avec un terminal composé d’une unité d’affichage ou d’un tube cathodique (CRT) et d’un clavier.

CICS fonctionne sur des systèmes centraux et micro-ordinateurs IBM et compatibles IBM et fournit une interface entre les programmes d’application et le système d’exploitation de l’ordinateur. Il fonctionne comme un système d’exploitation en ligne. Les programmeurs d’applications CICS utilisent COBOL au niveau des commandes pour coder des instructions faciles à utiliser dans leurs programmes.

Ces commandes facilitent l’accès et la mise à jour des fichiers de base de données en ligne, la saisie de données et l’affichage de données et d’autres informations sur le terminal d’affichage. Les utilisateurs de CICS peuvent transmettre des données de leurs terminaux au système où les données sont traitées puis renvoyées à l’utilisateur.

L’image suivante montre les composants de CICS et leur interdépendance :

Fonctionnalités de CICS :

  • CICS est une tâche unique pour MVS bien qu’il se comporte comme un système d’exploitation au sein d’un système d’exploitation, dont le travail consiste à fournir un environnement pour l’exécution de travaux en ligne, y compris des interfaces vers des fichiers et des bases de données.
  • L’espace d’adressage CICS reçoit un statut privilégié dans le système MVS.
  • CICS possède une fonction de fonctionnement multirégion, c’est-à-dire que plusieurs espaces d’adressage
  • CICS peuvent communiquer entre eux.
  • CICS est facile à développer des applications en ligne et son codage est similaire aux langages de haut niveau.
  • CICS a une interface commune avec la base de données et les ensembles de données.
  • CICS a un meilleur temps de réponse.
  • CICS est facile à personnaliser.
  • CICS n’a pas besoin de coder les données pour les afficher à l’écran.
  • CICS facilite le développement de formulaires à l’aide de la fonction BMS.
  • CICS est l’indépendance de l’appareil.
  • CICS a l’indépendance des données.
  • CICS permet le partage de code entre les applications.

Qu’est-ce qu’une application CICS ?

Une application est un ensemble de programmes associés qui exécutent ensemble une opération commerciale, telle que le traitement d’une commande de produit ou la préparation d’une paie d’entreprise. Les applications CICS s’exécutent sous le contrôle de CICS, en utilisant les services et les interfaces CICS pour accéder aux programmes et aux fichiers.

CICS est un sous-système de traitement des transactions. Cela signifie qu’il vous fournit des services pour exécuter des applications en ligne, sur demande, en même temps que de nombreux autres utilisateurs soumettent des demandes pour exécuter les mêmes applications, en utilisant les mêmes fichiers et programmes. CICS gère le partage des ressources ; l’intégrité des données et la priorisation de l’exécution, avec une réponse rapide.

Qu’est-ce qu’une transaction ?

Un programme CICS est appelé via une transaction. Une transaction CICS est une collection de programmes logiquement liés dans une application. L’ensemble de l’application pourrait être logiquement divisé en plusieurs transactions.

  • Les identifiants de transaction de 1 à 4 caractères sont utilisés pour identifier les transactions que les utilisateurs souhaitent effectuer.
  • Un programmeur lie un programme à l’identifiant de transaction qui est utilisé pour appeler tous les programmes d’application pour cette transaction particulière.

Qu’est-ce que la tâche ?

Une tâche est une unité de travail spécifique à un utilisateur.Les utilisateurs invoquent une application en utilisant l’un des identifiants de transaction. CICS recherche l’identificateur de transaction pour savoir quel programme appeler en premier pour effectuer le travail demandé. Il crée une tâche pour effectuer le travail et transfère le contrôle au programme mentionné.Une transaction peut être complétée par plusieurs tâches.Une tâche peut recevoir et envoyer des données au terminal qui l’a lancée. Il peut lire et écrire des fichiers et peut également démarrer d’autres tâches.

Question d’entretien : Différence entre la tâche et la transaction

La tâche est une unité de travail et la transaction est une entité qui lance l’exécution de la tâche. L’identificateur de transaction identifie la transaction dans CICS.

La différence entre une transaction et une tâche est que plusieurs utilisateurs peuvent invoquer une transaction mais chaque utilisateur lance sa propre tâche.

CICS – Terminologie

Concepts de tâche, multitâche, multithreading, conversation et pseudo conversation

Tâche:

Une tâche est créée pour chaque identifiant de transaction exécuté, TRANSID, reconnu par CICS (trouvé dans la table de contrôle du programme). Une tâche peut inclure un ou plusieurs programmes. Une tâche continue jusqu’à ce qu’un programme rende le contrôle à CICS ou émette une commande RETURN dans un programme pseudo-conversationnel. Une seule tâche peut être en cours d’exécution à un moment donné, mais l’utilisateur peut percevoir que de nombreuses tâches sont en cours d’exécution.

Multitâche :

Le multitâche signifie que le système d’exploitation (OS) permet à plusieurs tâches d’être exécutées simultanément, que les tâches utilisent le même programme ou des programmes différents. Par conséquent, ce n’est pas un concept propre à CICS. Mais CICS gère le multitâche des tâches CICS dans sa propre région. Autrement dit, CICS fournit un environnement multitâche dans lequel plusieurs tâches CICS s’exécutent simultanément.

Multithread :

Le multithreading est l’environnement système dans lequel les tâches partagent le même programme dans l’environnement multitâche. Le multithreading est un sous-ensemble du multitâche, puisqu’il concerne des tâches qui utilisent le même programme.Dans l’environnement multithreading, un programme est partagé par plusieurs tâches simultanément. Pour chaque tâche, le programme (c’est-à-dire les instructions et la zone de données) doit fonctionner comme s’il exécutait des instructions exclusivement pour chaque tâche. Par conséquent, cela nécessite des considérations particulières telles que la réentrance ou la réutilisation en série.Contrairement à l’environnement multithreading, dans l’environnement à thread unique, un programme est utilisé par un seul travail (ou tâche) à la fois. Un exemple typique est un travail par lots.

Terminologie SCIC


Concepts de tâche, multitâche, multithreading, conversation et pseudo conversation

Tâche:

Une tâche est créée pour chaque identifiant de transaction exécuté, TRANSID, reconnu par CICS (trouvé dans la table de contrôle du programme). Une tâche peut inclure un ou plusieurs programmes. Une tâche continue jusqu’à ce qu’un programme rende le contrôle à CICS ou émette une commande RETURN dans un programme pseudo-conversationnel. Une seule tâche peut être en cours d’exécution à un moment donné, mais l’utilisateur peut percevoir que de nombreuses tâches sont en cours d’exécution.


Multitâche :

Le multitâche signifie que le système d’exploitation (OS) permet à plusieurs tâches d’être exécutées simultanément, que les tâches utilisent le même programme ou des programmes différents. Par conséquent, ce n’est pas un concept propre à CICS. Mais CICS gère le multitâche des tâches CICS dans sa propre région. Autrement dit, CICS fournit un environnement multitâche dans lequel plusieurs tâches CICS s’exécutent simultanément.

Multithread :

Le multithreading est l’environnement système dans lequel les tâches partagent le même programme dans l’environnement multitâche. Le multithreading est un sous-ensemble du multitâche, puisqu’il concerne des tâches qui utilisent le même programme.

Dans l’environnement multithreading, un programme est partagé par plusieurs tâches simultanément. Pour chaque tâche, le programme (c’est-à-dire les instructions et la zone de données) doit fonctionner comme s’il exécutait des instructions exclusivement pour chaque tâche. Par conséquent, cela nécessite des considérations particulières telles que la réentrance ou la réutilisation en série.

Contrairement à l’environnement multithreading, dans l’environnement à thread unique, un programme est utilisé par un seul travail (ou tâche) à la fois. Un exemple typique est un travail par lots.


Question d’entretien : Différence entre le multitâche et le multithreading ?

Le système d’exploitation permet l’exécution simultanée de plusieurs tâches, c’est ce qu’on appelle le multitâche. Si la ou les tâches simultanées utilisent la même copie du programme, cela s’appelle le multithreading. Il est donc évident que le multitâche est un sous-ensemble du multithreading.


Modes de programmation d’applications :

  • Conversationnel
  • Pseudo-conversationnel

De la conversation:

  • Le système envoie un message à l’écran
  • Attend la réponse de l’utilisateur.
  • Cela prend un temps considérable en termes de temps système. Ce temps est appelé THINK TIME de l’utilisateur. (Désavantage)
  • Reçoit la réponse
  • Traiter les données reçues.

La programmation conversationnelle est une technique de codage qui entraîne le chargement d’un programme et le reste dans la mémoire principale jusqu’à ce que l’utilisateur ait fini de travailler avec le programme. Le programme n’est pas libéré de la mémoire principale lorsqu’il n’est pas actif, comme dans la programmation pseudo conversationnelle. Par exemple, un programme conversationnel affiche une carte et reste dans la mémoire principale en attendant la réponse d’un utilisateur.

Les applications pratiques de la programmation conversationnelle sont très limitées.

Pseudoconversation :

  • Le système envoie un message
  • Terminer la transaction en spécifiant la prochaine transaction à démarrer
  • Allouer des ressources à d’autres transactions
  • Interroger l’entrée du terminal à intervalle régulier
  • Reçoit les données et démarre la prochaine transaction spécifiée précédemment

CICS permet à de nombreux utilisateurs de se connecter et d’utiliser CICS simultanément. La taille de la mémoire principale de l’ordinateur est finie. Si de nombreux utilisateurs exécutent des transactions nécessitant un stockage principal considérable, une condition de stockage insuffisant peut se produire, entraînant des retards.

La programmation pseudo-conversationnelle est une technique de codage qui se traduit par le chargement d’un programme dans le stockage principal en cas de besoin et sa libération lorsqu’il n’est plus actif. Par exemple, lorsqu’une carte est affichée et que le programme attend la réponse d’un utilisateur, le programme peut être libéré de la mémoire principale et rechargé si nécessaire.

CICS charge et libère automatiquement les programmes d’application de la mémoire principale. Les programmes à forte utilisation sont souvent définis comme résidents du stockage principal et le système les conserve dans le stockage principal. Les tables et les cartes, qui sont considérées comme des programmes par CICS, sont généralement contrôlées par un programme.

Généralement, lors de l’utilisation de la technique de traitement pseudo-conversationnelle, le fait d’appuyer sur une touche AID provoque le chargement d’un programme s’il n’est pas déjà dans la mémoire principale. Lorsqu’un programme a terminé avec un segment logique de traitement, il envoie normalement une carte, enregistre les données requises et rend le contrôle à CICS.


Réentrant et Quasi-réentrant

Si la même copie du programme est utilisée par plusieurs tâches, le système doit s’occuper de la réentrée appropriée après l’interruption SVC/CICS.

Un programme réentrant est défini comme un programme qui ne se modifie pas pour pouvoir se réintégrer et continuer le traitement après une interruption par l’appel SVC de l’OS. Les programmes batch ne sont pas réentrants. La réentrance dans l’environnement CICS est appelée quasi-entrant car l’interruption dans CICS peut impliquer plus d’un appel SVC ou aucun SVC du tout.

Les programmes COBOL doivent être compilés avec l’option RENT pour la réentrance dans un environnement multithreading.

Question d’entretien : Différence entre le multitâche et le multithreading ?

Le système d’exploitation permet l’exécution simultanée de plusieurs tâches, c’est ce qu’on appelle le multitâche. Si la ou les tâches simultanées utilisent la même copie du programme, cela s’appelle le multithreading. Il est donc évident que le multitâche est un sous-ensemble du multithreading.

CICS – Environnement

CICS lui-même agit comme un système d’exploitation. Son travail consiste à fournir un environnement pour l’exécution en ligne des programmes d’application. CICS s’exécute dans une région, une partition ou un espace adresse. CICS gère la planification des programmes qui s’exécutent sous lui. CICS s’exécute comme un travail par lots et nous pouvons le visualiser dans le spool en émettant la commande PREFIX CICS*.

Cinq services principaux sont fournis par le CICS. Tous ces services accomplissent ensemble une tâche:

  1. Services système
  2. Services de communication de données
  3. Services de traitement des données
  4. Services de programmation d’applications
  5. Services de surveillance


Services système :

CICS maintient des fonctions de contrôle pour gérer l’allocation ou la désallocation des ressources au sein du système qui sont les suivantes :

Contrôle des tâches – Le contrôle des tâches fournit des fonctionnalités de planification des tâches et de multitâche. Il prend en charge l’état de toutes les tâches CICS. Le contrôle des tâches répartit le temps processeur entre les tâches CICS simultanées. C’est ce qu’on appelle le multitâche. CICS essaie de donner la priorité au temps de réponse de la tâche la plus importante.

Contrôle du programme – Le contrôle du programme gère le chargement et la libération des programmes d’application. Dès qu’une tâche commence, il devient nécessaire d’associer la tâche au programme d’application approprié. Bien que de nombreuses tâches puissent nécessiter l’utilisation du même programme d’application, CICS ne charge qu’une seule copie du code en mémoire. Chaque tâche chemine indépendamment dans ce code, de sorte que de nombreux utilisateurs peuvent tous exécuter des transactions qui utilisent simultanément la même copie physique d’un programme d’application.

Contrôle du stockage – Le contrôle du stockage gère l’acquisition et la libération du stockage principal. Le contrôle du stockage acquiert, contrôle et libère le stockage dynamique. Le stockage dynamique est utilisé pour les zones d’entrée/sortie, les programmes, etc.

Contrôle d’intervalle – Le contrôle d’intervalle offre des services de minuterie.


Services de communication de données :

Les services de communication de données s’interfacent avec les méthodes d’accès aux télécommunications telles que BTAM, VTAM et TCAM pour gérer les demandes de communication de données des programmes d’application.

  • CICS libère les programmes d’application de la charge de traiter les problèmes matériels du terminal grâce à l’utilisation du support de mappage de base (BMS).
  • CICS fournit un fonctionnement multirégional (MRO) grâce auquel plusieurs régions CICS du même système peuvent communiquer.
  • CICS fournit une communication inter-système (ISC) grâce à laquelle une région CICS d’un système peut communiquer avec la région CICS d’un autre système.

Services de traitement des données :

Interface des services de traitement des données avec les méthodes d’accès aux données telles que BDAM, VSAM, etc.

  • CICS facilite le traitement des demandes de traitement de données provenant des programmes d’application. CICS fournit aux programmeurs d’applications un ensemble de commandes pour gérer l’accès à l’ensemble de données et à la base de données et les opérations associées.
  • Les services de traitement des données s’interfacent avec les méthodes d’accès aux bases de données telles que IMS/DB, DB2, etc. et facilitent le traitement des demandes de base de données à partir des programmes d’application.
  • CICS facilite la gestion de l’intégrité des données en contrôlant les mises à jour simultanées des enregistrements, la protection des données en tant que tâches ABEND et la protection des données en cas de défaillance du système.

Services de programmation d’applications :

Interface des services de programmation d’applications avec les programmes d’application. Les services de programmation d’application de CICS fournissent des fonctionnalités telles que la traduction au niveau de la commande, CEDF (la fonction de débogage) et CECI (la fonction d’interpréteur de commandes). Nous en discuterons plus en détail dans les prochains modules.


Services de surveillance :

Les services de surveillance surveillent divers événements dans l’espace d’adressage CICS. Il fournit une série d’informations statistiques qui peuvent être utilisées pour le réglage du système.

CICS – Programme en ligne VS Programme Batch


Système de traitement par Batch :

Un système de traitement par batch gère de grandes quantités de données traitées selon un calendrier de routine. Le traitement a lieu lorsque l’après l’événement économique se produit et est enregistré. Il nécessite moins de ressources de programmation, de matériel et de formation. Dans ce système, les programmes sont planifiés par le biais de tâches. Il permet le partage de programmes et de fichiers.

Les exemples incluent la requête d’inventaire, la transaction d’achat sur le site Web, le retrait de compte e-Banking, etc.

Avantages :

  • Gère facilement les gros travaux répétés.
  • Les travaux répétés sont effectués rapidement.
  • Les systèmes par batch peuvent fonctionner hors ligne.

Désavantages:

  • Difficile de déboguer les systèmes batch
  • Parfois coûteux
  • Attend pendant une durée inconnue si une erreur se produit avec n’importe quel travail

Système de traitement en ligne :

Un système de traitement en ligne gère les transactions en temps réel et fournit la sortie instantanément. Lorsqu’un événement économique a lieu, le traitement a lieu. Il nécessite plus de ressources matérielles dédiées, des éléments de traitement sont nécessaires. Dans ce système, les programmes sont lancés par le biais de transactions. Il ne permet pas le partage de programmes et de fichiers.

Les exemples incluent le calcul des taxes de fin de mois, la transformation des données, l’analyse des données, la transformation des données, etc.

Avantages :

  • Utile pour les transactions d’argent en ligne
  • Utile pour les achats en ligne
  • Soutien et stabilité

Désavantages:

  • Des millions de demandes deviennent parfois difficiles à gérer
  • beaucoup de personnel nécessaire pour maintenir l’inventaire
  • Les problèmes matériels créent de gros problèmes

En quoi les programmes en ligne diffèrent-ils des programmes batch ?

Système de traitement BATCHSystème en ligne
EntréeDonnées de carte, bande, disque. En BATCH, séquentiel, programmé. Par exemple Keypunch, codage de données.Données du terminal. Aléatoire, concurrent. Peut être saisi au fur et à mesure que les données arrivent.
Update  du fichierRéservé lors d’un travail. D’autres travaux doivent attendre.Concurrent. Instantané.
Entrée/sortie de fichierL’entrée/la sortie doit être en séquenceLes entrées/sorties peuvent être simultanées
Sortie Rapports imprimés, fichiers de sortieMessages envoyés à la console, Fichiers mis à jour Journal système, Rapports.
Début de traitementL’opérateur (ou le système d’exploitation) lance le travailLa saisie de Trans-ID déclenche la transaction
Mode processusTâche unique et thread Priorité dans la planification des tâchesTraitement prioritaire multitâche et multithread
Fin de traitementChaque travailChaque opération
Turn-aroundGénéralement beaucoup plus longtempsPresque instantané
RessourcesMoins d’utilisationPlus d’utilisation
ApplicationRapport de ventes mensuelRéservation de compagnie aérienne

Instruction SQL CREATE INDEX

L’instruction CREATE INDEX est utilisée pour créer des index dans les tables.

Les index sont utilisés pour récupérer les données de la base de données plus rapidement qu’autrement. Les utilisateurs ne peuvent pas voir les index, ils sont juste utilisés pour accélérer les recherches/requêtes.

La mise à jour d’une table avec des index prend plus de temps que la mise à jour d’une table sans (car les index ont également besoin d’une mise à jour). Donc, ne créez des index que sur les colonnes qui seront fréquemment recherchées.

CREATE [UNIQUE] INDEX nom-index
        ON nom-table (nom-colonne [ASC | DESC])
        [CLUSTER | NOT CLUSTER]
        [PARTITIONED]
        [PADDED | NOT PADDED]
        [using-specification]
        [free-specification]
        [DEFINE YES | NO]
        [COMPRESS YES | NO]
        [PARTITION BY RANGE partition-element
                      using-specification
                      free-specification]
        [BUFFERPOOL nom-bp]
        [CLOSE YES | NO]
        [DEFER YES | NO]
        [PIECESIZE integer]
        [COPY YES | NO]


using-specification
        USING
              VCAT nom-catalogue |
              STOGROUP nom-stogroup
                  PRIQTY integer
                  SECQTY integer
                  ERASE YES | NO

free-specification
        FREEPAGE integer
        PCTFREE integer

partition-element
        PARTITION integer
        ENDING AT (constant/MAXVALUE/MINVALUE)

UNIQUE:

Cela empêche la table de contenir deux lignes ou plus avec la même valeur de la clé d’index.

ASC :

  • Spécifie que les entrées d’index doivent être conservées dans l’ordre croissant des valeurs de colonne.
  • Ce sont les paramètres par défauts.

DESC :

Spécifie que les entrées d’index doivent être conservées dans l’ordre décroissant des valeurs de colonne.

CLUSTER ou NOT CLUSTER :

Spécifie si l’index est l’index de clustering de la table ou non.

PARTITIONED :

Spécifie que l’index est des données partitionnées

PADDED ou NOT PADDED :

Spécifie comment les colonnes de chaîne de longueur variable doivent être stockées dans l’index.

  • PADDED : spécifie que les colonnes de chaîne de longueur variable dans l’index sont toujours remplies avec le caractère de remplissage par défaut jusqu’à leur longueur maximale.
  • NOT PADDED : spécifie que les colonnes de chaîne de longueur variable ne doivent pas être remplies à leur longueur maximale dans l’index.

Clause USING :

  • Pour les index non partitionnés, la clause USING indique si les ensembles de données de l’index doivent être gérés par l’utilisateur ou gérés par DB2.
  • VCAT : spécifie que le premier ensemble de données pour l’index est géré par l’utilisateur et que les ensembles de données suivants, si nécessaire, sont également gérés par l’utilisateur.
  • STOGROUP : Spécifie que DB2 définira et gérera les ensembles de données d’index. 
  • PRIQTY : spécifie l’allocation d’espace primaire minimum pour l’ensemble de données gérées DB2.
  • SECQTY : spécifie l’allocation d’espace secondaire minimum pour l’ensemble de données gérées DB2.
  • ERASE : Indique si les ensembles de données gérés par DB2 doivent être effacés lors de la suppression de l’index.

FREEPAGE :

Spécifie la fréquence à laquelle laisser une page d’espace libre lors de la création d’entrées d’index.

PCTFREE :

Détermine le pourcentage d’espace libre à laisser dans chaque page non-feuille et page feuille lorsque des entrées sont ajoutées à l’index.

DEFINE :

Spécifie quand les ensembles de données sous-jacents pour l’index sont physiquement créés.

  • OUI : les ensembles de données sont créés lors de la création de l’index. OUI est la valeur par défaut.
  • NON : les ensembles de données ne sont pas créés tant que les données ne sont pas insérées dans l’index.

COMPRESS :

Spécifie si la compression des données d’index sera utilisée.

  • NO : spécifie qu’aucune compression d’index ne sera utilisée. C’est la valeur par défaut.
  • YES : spécifie que la compression d’index sera utilisée.

PARTITION BY RANGE :

Spécifie que l’index est l’index de partitionnement.

  • PARTITION integer : une clause PARTITION spécifie la valeur la plus élevée de la clé d’index dans une partition d’un index de partitionnement.
  • ENDING AT : Spécifie qu’il s’agit de l’index de partitionnement et indique comment les données seront partitionnées.
    CONSTANT : spécifie une valeur constante avec un type de données qui doit être conforme aux règles d’attribution de cette valeur à la colonne.
    MAXVALUE : spécifie une valeur supérieure à la valeur maximale pour la clé de limite d’une limite de partition.
    MINVALUE : spécifie une valeur inférieure à la valeur minimale de la clé de limite d’une limite de partition.

BUFFERPOOL :

Identifie le pool de mémoire tampon à utiliser pour l’index.

CLOSE :

Spécifie si l’ensemble de données peut ou non être fermé lorsque l’index n’est pas utilisé et que la limite du nombre d’ensembles de données ouverts est atteinte.

  • OUI : Admissible à la fermeture. C’est la valeur par défaut
  • NON : Non éligible à la fermeture.

DEFER :

Indique si l’index est créé lors de l’exécution de l’instruction CREATE INDEX.

  • NON : L’index est construit. C’est la valeur par défaut.
  • OUI : L’index n’est pas construit.

PIECESIZE :

Spécifie l’adressabilité maximale de chaque ensemble de données pour un index.

COPY :

Indique si l’utilitaire COPY est autorisé pour l’index.

  • NON : N’autorise pas l’image complète ou les copies simultanées. NON est la valeur par défaut.
  • OUI : Autorise l’image complète ou les copies simultanées.

Exemple 1:

Créez un index sur la colonne TAB1_COL2 d’une table TB_TAB1.

CREATE INDEX IX_TAB1_COL2
       ON TB_TAB1(TAB1_COL2);

Créez un index nommé NOM_IX_PROJET sur la table TB_PROJET. Le but de l’index est de s’assurer qu’il n’y a pas deux entrées dans la table avec la même valeur pour le nom du projet (NOM_PROJET). Les entrées d’index doivent être dans l’ordre croissant.

CREATE UNIQUE INDEX NOM_IX_PROJET
       ON TB_PROJET(NOM_PROJET);

Créez un index nommé IX_EMPLOYE_JOB_DEPT sur la table TB_EMPLOYE. Organisez les entrées d’index dans l’ordre croissant par intitulé de poste (EMPLOYE_JOB) au sein de chaque département (EMPLOYE_DEPT).

CREATE INDEX IX_EMPLOYE_JOB_DEPT
       ON TB_EMPLOYE (EMPLOYE_DEPT, EMPLOYE_JOB);

Exemple 2 :

Créez un index unique, nommé DSN8910.IX_DEPT, sur la table DSN8910.TB_DEPT. Les entrées d’index doivent être dans l’ordre croissant par la colonne unique DEPT_NO. DB2 doit définir les ensembles de données pour l’index, à l’aide du groupe de stockage DSN8G910.

Chaque ensemble de données doit contenir au maximum 1 Mégaoctet de données. Utilisez 512 Ko comme allocation d’espace primaire pour chaque ensemble de données et 64 Ko comme allocation d’espace secondaire. Remplir l’index.

Les ensembles de données peuvent être fermés lorsque personne n’utilise l’index et n’ont pas besoin d’être effacés si l’index est supprimé.

CREATE UNIQUE INDEX DSN8910.IX_DEPT
        ON DSN8910.TB_DEPT
              (DEPT_NO ASC)
        PADDED
        USING STOGROUP DSN8G910
                       PRIQTY 512
                       SECQTY 64
                       ERASE NO
       BUFFERPOOL BP1
       CLOSE YES
       PIECESIZE 1M;

Explication:

Les ensembles de données sous-jacents pour l’index seront créés immédiatement, ce qui est la valeur par défaut (DEFINE YES). En supposant que la table DSN8910.TB_DEPT est vide, si nous voulions différer la création des ensembles de données jusqu’à ce que les données soient insérées pour la première fois dans l’index, nous spécifierions DEFINE NO au lieu d’accepter le comportement par défaut.

La spécification de PADDED garantit que les colonnes de chaînes de caractères de longueur variable dans l’index sont complétées par des blancs.

Exemple 3 :

Créez un index de cluster, nommé IX_EMP, sur la table TB_EMP dans la base de données DSN8910. Mettez les entrées dans l’ordre croissant par la colonne EMP_NO. Laissez DB2 définir les ensembles de données pour chaque partition à l’aide du groupe de stockage DSN8G910. Faites en sorte que l’allocation d’espace principal soit de 36 kilo-octets et autorisez DB2 à utiliser la valeur par défaut pour SECQTY. Si l’index est supprimé, les ensembles de données n’ont pas besoin d’être effacés.

Il doit y avoir 4 partitions, avec des entrées d’index réparties entre elles comme suit :

  • Partition 1 : entrées jusqu’à H99
  • Partition 2 : entrées au-dessus de H99 jusqu’à P99
  • Partition 3 : entrées au-dessus de P99 jusqu’à Z99
  • Partition 4 : entrées au-dessus de Z99

Associez l’index au pool de mémoire tampon BP1 et autorisez la fermeture des ensembles de données lorsque personne n’utilise l’index. Activez l’utilisation de l’utilitaire COPY pour l’image complète ou les copies simultanées.

CREATE INDEX DSN8910.IX_EMP
        ON DSN8910.TB_EMP
            (EMP_NO ASC)
        USING
            STOGROUP DSN8G910
                PRIQTY 36
                ERASE NO
        CLUSTER
        PARTITION BY RANGE
            (PARTITION 1 ENDING AT('H99'),
             PARTITION 2 ENDING AT('P99'),
             PARTITION 3 ENDING AT('Z99'),
             PARTITION 4 ENDING AT('999'))
        BUFFERPOOL BP1
        CLOSE YES
        COPY YES;

Instruction SQL CREATE TABLE

L’instruction CREATE TABLE est utilisée pour créer une nouvelle table dans la base de données.

Les tables peuvent être créées de deux manières :

  1. En spécifiant explicitement les colonnes et leurs types de données.
  2. Création basée sur la table existante.

Voici la syntaxe de création de table en spécifiant explicitement les colonnes et leurs types de données :

CREATE TABLE table-name
             column-definition
             table-constraint-clause
             physical-storage-clause

column-definition:
nom-colonne data type
    [WITH DEFAULT expression]
    [NULL|NOT NULL]
    [column-constraint-clause]
    [, nom-colonne data type [WITH DEFAULT expression] [NULL|NOT NULL]
    [column-constraint-clause]...]    

Constraint (column-constraint-clause or table-constraint-clause)
[CONSTRAINT constraint-name]
    [REFERENCES table-name [(column-name)]
          [ON DELETE {RESTRICT | CASCADE| SET TO NULL}]
    [UNIQUE]
    [PRIMARY KEY]
    [CHECK (check-condition)]

physical-storage-clause
IN database-name.tablespace-name

Default:

  • Lorsqu’une ligne est insérée dans la table et qu’aucune valeur n’est fournie pour la colonne, la valeur spécifiée dans la clause par défaut est insérée.
  • Si l’expression est manquante dans la clause par défaut, la valeur par défaut définie par le système pour le type de données de la colonne sera remplacée.

NULL / NON NULL :

  • NULL est une valeur par défaut.
  • NOT NULL : empêche la colonne de contenir des valeurs nulles. L’omission de NOT NULL implique que la colonne peut contenir des valeurs nulles.

Constraints :

Les contraintes sont définies à deux niveaux possibles.

  • Niveau colonne :Une contrainte au niveau de la colonne fait référence à une seule colonne et est définie avec la colonne. Celles-ci sont également appelées “contraintes en ligne”
  • Niveau tableau :Une contrainte au niveau de la table fait référence à une ou plusieurs colonnes et est définie séparément après la définition de toutes les colonnes. Celles-ci sont appelées contraintes hors ligne.
  • Vous devez utiliser une contrainte au niveau de la table si vous contraignez plusieurs colonnes.

Constraint-name :

  • Nom de la contrainte et est facultatif.
  • Si aucun nom de contrainte n’est spécifié, un nom de contrainte unique est généré.
  • Si le nom est spécifié, il doit être différent des noms de toute contrainte référentielle, de vérification, de clé primaire ou de clé unique précédemment spécifiée sur la table.

Contrainte FOREIGN KEY

  • La contrainte FOREIGN KEY est définie avec le mot clé REFERENCES.
  • La contrainte FOREIGN KEY (contrainte d’intégrité référentielle), assure que les valeurs de la clé étrangère correspondent aux valeurs d’une clé primaire.
  • Lors de la définition d’une contrainte FOREIGN KEY sur une table, le nom de colonne n’a pas besoin d’être identique au nom de colonne auquel il fait référence.
  • Par défaut, la contrainte de clé étrangère est de type DELETE RESTRICT : les lignes parentes ne peuvent pas être supprimées si des lignes enfants existent.
  • ON DELETE CASCADE : permet la suppression de la ligne de clé primaire et supprime également les lignes de clé étrangère qui s’y rapportent.
  • SET TO NULL : autorise la suppression de la ligne de clé primaire et, au lieu de supprimer toutes les lignes de clé étrangère associées, définit les colonnes de clé étrangère sur NULL.

Contrainte UNIQUE:

  • Pour appliquer des valeurs uniques à une colonne individuelle ou à un groupe de colonnes.
  • La colonne de contrainte UNIQUE ne doit pas contenir de valeurs NULL.
  • Une table peut contenir une ou plusieurs contraintes UNIQUE.

Contrainte PRIMARY KEY :

  • La PRIMARY KEY (CLÉ PRIMAIRE) garantit que toutes les valeurs de la ou des colonnes sont uniques.
  • La clause ne doit pas être spécifiée plus d’une fois et les colonnes identifiées doivent être définies comme NOT NULL.

Remarque : Si vous ne créez pas d’index unique pour une clé primaire ou pour une contrainte d’unicité, une clé incomplète est définie pour la table, rendant la table inaccessible.

CHECK :

Les contraintes CHECK appliquent des expressions logiques sur la ou les colonnes, qui doivent être évaluées comme vraies pour chaque ligne de la table.

Créer des tables basées sur d’autres tables.

Voici la syntaxe de création de table basée sur la table existante :

CREATE TABLE nom-table-destination
       LIKE nom-table-source
       IN nom-database.nom-tablespace

Créez une table TB_TAB1 dans la base de données DB_DB1 et l’espace de table TS_TS1 avec les spécifications suivantes avec les contraintes au niveau des colonnes et avec les noms de contraintes implicites.

Nom de colonneType de donnéesLongueurContrainteRemarques
TAB1_COL1IntegerClé primaire
TAB1_COL2IntegerNon nul
TAB1_COL3Varchar5clé étrangère à la colonne ZIP de la table ZIPCODE – si une ligne de la table ZIPCODE est supprimée, toutes les lignes avec le même code postal doivent être supprimées de la table TAB1
TAB1_COL4DateLa date actuelle doit être insérée par défaut
TAB1_COL5Char20Unique
TAB1_COL6IntegerDoit accepter les valeurs inférieures à 100. La valeur nulle est autorisée.

Voyons comment coder une instruction CREATE TABLE ci-dessous,

CREATE TABLE TB_TAB1
    (TAB1_COL1 INTEGER NOT NULL PRIMARY KEY,
     TAB1_COL2 INTEGER NOT NULL,
     TAB1_COL3 VARCHAR(5) REFERENCES ZIPCODE(ZIP)
          ON DELETE CASCADE,
     TAB1_COL4 DATE WITH DEFAULT,
     TAB1_COL5 CHAR(20) NOT NULL UNIQUE,
     TAB1_COL6 INTEGER CHECK(TAB1_COL6 < 100))
     IN DB_DB1.TS_TS1;

Explication:

  • TAB1_COL1 INTEGER NOT NULL PRIMARY KEY : Lorsque vous définissez une colonne comme clé primaire, elle doit être définie avec “Not Null” (la colonne de clé primaire ne doit pas contenir de valeurs nulles).
  • TAB1_COL5 CHAR (20) NOT NULL UNIQUE : Lorsque vous définissez une colonne avec la contrainte d’unicité, elle doit être définie avec “Not Null” (la colonne de contrainte d’unicité ne doit pas contenir de valeurs Null).
  • TAB1_COL4 DATE WITH DEFAULT: Lors de l’insertion, si vous ne fournissez pas de valeur pour cette colonne, la valeur par défaut de “Date actuelle” pour la variable “Date” sera insérée.

Exemple 2 :

Créez une table TB_TAB1 dans la base de données DB_DB1 et l’espace de table TS_TS1 avec les spécifications suivantes avec les contraintes au niveau de la table en nommant les contraintes de manière exclusive.

Nom de colonneType de donnéesLongueurContrainteRemarques
TAB1_COL1IntegerClé primaire
TAB1_COL2IntegerNon nul
TAB1_COL3Varchar5clé étrangère à la colonne ZIP de la table ZIPCODE – si une ligne de la table ZIPCODE est supprimée, toutes les lignes avec le même code postal doivent être supprimées de la table TAB1
TAB1_COL4DateLa date actuelle doit être insérée par défaut
TAB1_COL5Char20Unique
TAB1_COL6IntegerDoit accepter les valeurs inférieures à 100. La valeur nulle est autorisée.

Voyons comment coder une instruction CREATE TABLE ci-dessous,

CREATE TABLE TB_TAB1
      (TAB1_COL1 INTEGER NOT NULL,
      TAB1_COL2 INTEGER NOT NULL,
      TAB1_COL3 VARCHAR(5),
      TAB1_COL4 DATE WITH DEFAULT,
      TAB1_COL5 CHAR(20) NOT NULL,
      TAB1_COL6 INTEGER NOT NULL,
          CONSTRAINT TAB1_COL1_PK PRIMARY KEY(TAB1_COL1),
          CONSTRAINT TAB1_COL3_FK FOREIGN KEY(TAB1_COL3)
      REFERENCES ZIPCODE(ZIP),
          CONSTRAINT TAB1_COL5_COL6_UK UNIQUE(TAB1_COL5,TAB1_COL6),
          CONSTRAINT TAB1_COL6_CK CHECK(TAB1_COL6 < 100))
      IN DB_DB1.TS_TS1;

Explication:

CONSTRAINT TAB1_COL5_COL6_UK UNIQUE(TAB1_COL5,TAB1_COL6): Comme les deux colonnes TAB1_COL5 et TAB1_COL6 doivent avoir des contraintes uniques, vous avez combiné et créé cette contrainte et ces deux colonnes sont définies avec la clause NOT NULL.


Exemple 3 :

Créez une table TB_TAB1 dans une base de données DB_DB1 et dans un espace table TS_TS1, qui se comporte exactement comme la table TB_TAB2.

CREATE TABLE TB_TAB1 LIKE TB_TAB2
        IN DB_DB1.TS_TS1;

Instruction SQL ALTER TABLE

L’instruction SQL ALTER TABLE est utilisée pour ajouter, supprimer ou modifier des colonnes dans une table existante.

L’instruction ALTER TABLE est également utilisée pour ajouter et supprimer diverses contraintes sur une table existante.

Voici la syntaxe de modification de table :

ALTER TABLE nom_table 
    [ADD column-definition
         table-constraint-clause]
    [ALTER COLUMN column-alteration]
    [DROP CONSTRAINT nom-contraint|
          PRIMARY KEY|
          UNIQUE (nom-colonne [,nom-colonne...])]
    [RENAME COLUMN nom-colonne-source
                TO nom-column-cible]

column-alteration
    [SET DATA TYPE (altered-data-type)]
    [SET default-clause]
    [DROP DEFAULT]

Exemple 1:

La colonne NOM_DEPT dans la table DSN8910.TB_DEPARTMENT a été créée en tant que VARCHAR(36). Augmentez sa longueur à 60 octets. Ajoutez également la colonne CODE_DEPT à la table DSN8910.TB_DEPARTMENT. Décrivez la nouvelle colonne comme une colonne de chaîne de caractères de longueur 5.

ALTER TABLE DSN8910.TB_DEPARTMENT
      ALTER COLUMN DEPT_NAME
            SET DATA TYPE VARCHAR(60)
      ADD DEPT_BLDG CHAR(5);

Exemple 2 :

Modifiez la table TB_PRODINFO pour définir une clé étrangère qui fait référence à une clé unique non primaire dans la table de version du produit (TB_PRODVER). Les colonnes de la clé unique sont NOM_PRODVER et RELNO_PRODVER.

ALTER TABLE TB_PRODINFO
      FOREIGN KEY (NOM_PRODINFO, VERNO_PRODINFO)
      REFERENCES TB_PRODVER (NOM_PRODVER, RELNO_PRODVER)
      ON DELETE RESTRICT;

Instruction SQL CREATE DATABASE

L’instruction CREATE DATABASE est utilisée pour créer une nouvelle base de données DB2.

La syntaxe de création de base de données est la suivante

CREATE



DATABASE nom-database
BUFFERPOOL nom-bp
INDEXBP nom-idx
STOGROUP nom-stogroup
CCSID ASCII/EBCDIC/UNICODE

Explication de la syntaxe :

  • BUFFERPOOL :
    Spécifie le nom du pool de mémoire tampon par défaut à utiliser pour les espaces table créés dans la base de données.
    Si vous omettez la clause BUFFERPOOL, le BP par défaut, BP0 est utilisé.
  • INDEXBP :
    Spécifie le nom du pool de mémoire tampon par défaut à utiliser pour les index créés dans la base de données.
    Si vous omettez la clause INDEXBP, le BP par défaut, BP0 est utilisé.
  • STOGROUP :
    Spécifie le groupe de stockage à utiliser pour prendre en charge les exigences d’espace DASD pour les espaces table et les index dans la base de données. 
    La valeur par défaut est SYSDEFLT.
  • CCSID (Coded Character Set ID) :
    Spécifie le schéma de codage par défaut pour les données stockées dans la base de données.
    Les schémas de codage sont ASCII, EBCDIC, UNICODE.

Exemple 1:

Créez une base de données DSN003 (DATABASE). Spécifiez DSN003 comme groupe de stockage (STOGROUP) par défaut à utiliser pour les espaces table et les index de la base de données. Spécifiez le pool de mémoire tampon de 8 Ko BP8K1 comme pool de mémoire tampon par défaut à utiliser pour les espaces table de la base de données (BUFFERPOOL) et BP2 comme pool de mémoire tampon par défaut à utiliser pour les index de la base de données (INDEXBP).

CREATE


DATABASE DSN003
STOGROUP DSN003
BUFFERPOOL BP8K1
INDEXBP BP2;

Exemple 2 :

Créez une base de données DSN1TEMP. Utilisez les valeurs par défaut pour les noms de groupe de stockage et de pool de mémoire tampon par défaut. Spécifiez ASCII comme schéma de codage par défaut pour les données stockées dans la base de données.

CREATE DATABASE DSN1TEMP CCSID ASCII;