A object-type CANNOT BE DROPPED USING THE statementSTATEMENT
Explication : Une instruction DROP a été émise, mais l’objet ne peut pas être explicitement supprimé. L’objet doit être déposé en déposant un objet associé :
TRIGGER PACKAGE Un trigger package ne peut pas être supprimé avec l’instruction DROP PACKAGE. Un trigger package ne peut être supprimé implicitement que lorsque le déclencheur associé est supprimé à l’aide de l’instruction DROP TRIGGER.
CAST FUNCTION Une cast function ne peut pas être explicitement supprimée avec l’instruction DROP FUNCTION. Une cast function ne peut être supprimée implicitement que lorsque le type distinct associé est supprimé à l’aide de l’instruction DROP DISTINCT TYPE.
ROW PERMISSION Une row permission par défaut ne peut pas être explicitement supprimée avec l’instruction DROP PERMISSION. Une row permission par défaut ne peut être supprimée implicitement que lorsque la table associée est supprimée à l’aide de l’instruction DROP TABLE. Alternativement, l’autorisation de ligne par défaut peut être supprimée à l’aide de l’instruction ALTER TABLE avec la clause DEACTIVATE ROW ACCESS.
Action du système : La déclaration ne peut pas être traitée.
Réponse du programmeur : Émettez l’instruction DROP appropriée pour supprimer les objets voulus.
INDEX index-name CANNOT BE CREATED OR ALTERED ON PARTITIONED TABLE SPACE tspace-name BECAUSE KEY LIMITS ARE NOT SPECIFIED
Explication : L’instruction CREATE INDEX ou ALTER INDEX n’a pas spécifié de valeurs de clé limites pour les partitions de l’espace table. Pour créer un index de clustering pour une table dans un espace table partitionné, ou pour modifier ces valeurs à l’aide de ALTER INDEX, vous devez inclure ces valeurs.
Action du système : La déclaration ne peut pas être traitée. L’index de cluster spécifié n’a pas été créé ou modifié.
Réponse du programmeur : Vérifiez que la table correcte a été spécifiée dans l’instruction CREATE INDEX ou ALTER INDEX. Si c’est le cas, la définition de l’espace table partitionné doit être examinée afin qu’une définition appropriée de l’index de grappe pour la table puisse être construite.
object-typeobject-name CANNOT BE CREATED ON PARTITIONED TABLE SPACE tspace-name BECAUSE THE NUMBER OF PARTITION SPECIFICATIONS IS NOT EQUAL TO THE NUMBER OF PARTITIONS OF THE TABLE SPACE
Explication :
La définition du object-name est incorrecte pour l’une des raisons suivantes :
Si object-type est INDEX, l’instruction CREATE INDEX pour l’index de cluster sur une table partitionnée (c’est-à-dire une table résidant dans un espace table partitionné) ne contient pas le même nombre de spécifications de partition qu’il y a de partitions dans l’espace table. La définition de l’index de cluster d’une table partitionnée doit contenir exactement autant de spécifications de partition qu’il y a de partitions dans l’espace table dans lequel réside cette table. De plus, les numéros de partition doivent être valides et uniques.
Si object-type est TABLE, le nombre de partitions spécifié dans la clause de partitionnement de l’instruction CREATE TABLE diffère du nombre de partitions dans l’espace table dans lequel la table est créée.
Action du système : La déclaration ne peut pas être traitée. L’index de cluster ou la table spécifié n’a pas été créé.
Réponse du programmeur : Examinez la définition de l’espace table partitionné pour déterminer le nombre de partitions spécifiées. Corrigez la syntaxe de l’instruction CREATE INDEX ou CREATE TABLE pour fournir le nombre correct de spécifications de partition.
THE CREATE OR ALTER STOGROUP IS INVALID BECAUSE THE STORAGE GROUP WOULD HAVE BOTH SPECIFIC AND NON-SPECIFIC VOLUME IDS
Explication :
L’une des conditions d’erreur suivantes s’est produite :
Un ID de volume spécifique et un ID de volume non spécifique (‘*’) sont spécifiés dans la clause VOLUMES d’une instruction CREATE STOGROUP.
Un ID de volume spécifique et un ID de volume non spécifique (‘*’) sont spécifiés dans une clause ADD VOLUMES d’une instruction ALTER STOGROUP.
Un ID de volume spécifique est spécifié dans une clause ADD VOLUMES d’un ALTER d’un groupe de stockage qui a des ID de volume non spécifiques ou des ID de volume mixtes.
Un ID de volume non spécifique (‘*’) est spécifié dans une clause ADD VOLUMES d’un ALTER d’un groupe de stockage qui a des ID de volume spécifiques ou des ID de volume mixtes.
Action du système : La déclaration ne peut pas être traitée.
Réponse du programmeur : Spécifiez des ID de volume spécifiques ou non spécifiques dans la clause VOLUMES de l’instruction CREATE STOGROUP et la clause ADD VOLUMES de l’instruction ALTER STOGROUP. Pour ajouter des ID de volume spécifiques à un groupe de stockage avec des ID de volume non spécifiques, utilisez la clause REMOVE VOLUMES pour supprimer les ID de volume non spécifiques. Pour ajouter des ID de volume non spécifiques à un groupe de stockage avec des ID de volume spécifiques, utilisez la clause REMOVE VOLUMES pour supprimer les ID de volume spécifiques.
TABLE table-name IN PARTITIONED TABLE SPACE tspace-name IS NOT AVAILABLE BECAUSE ITS PARTITIONED INDEX HAS NOT BEEN CREATED
Explication : Une tentative a été effectuée pour insérer ou manipuler des données ou créer une vue sur une table partitionnée (c’est-à-dire une table résidant dans un espace table partitionné) avant que l’index partitionné de cette table ait été créé.
Une table résidant dans un espace table partitionné ne peut pas être référencée dans une instruction de manipulation SQL ou une instruction CREATE VIEW avant que l’index partitionné de cette table ait été créé.
Action du système : La déclaration ne peut pas être traitée.
Réponse du programmeur : Vérifiez que la table correcte a été spécifiée dans l’instruction. Si tel est le cas, assurez-vous que l’index partitionné de la table a été créé avec succès avant de tenter d’exécuter des instructions de manipulation SQL faisant référence à cette table.
VIOLATION OF INSTALLATION DEFINED EDIT OR VALIDATION PROCEDURE proc-name
Explication : Le résultat de l’instruction SQL a été rejeté par la procédure d’édition ou de validation définie par l’installation ‘proc-name‘ pour la table d’objets.
Action du système : La déclaration ne peut pas être traitée. Le contenu de la table d’objets n’a pas été modifié.
Réponse du programmeur : Déterminez les exigences imposées par la procédure d’édition ou de validation pour les insertions et les mises à jour de la table d’objets.
TABLE DESCRIPTION EXCEEDS MAXIMUM SIZE OF OBJECT DESCRIPTOR
Explication : L’instruction CREATE TABLE ou ALTER TABLE fait que la description de la table (enregistrement OBD) dépasse la limite de taille de la description objet de 32 Kb.
Action du système : L’instruction n’est pas exécutée. Pour une instruction ALTER TABLE, la définition de la table est inchangée. Pour une instruction CREATE TABLE, la table n’est pas créée.
Réponse du programmeur : Modifiez l’instruction en réduisant le nombre ou la longueur (ou une combinaison des deux) des constantes de chaîne par défaut définies par l’utilisateur ou vérifiez les contraintes et exécutez à nouveau l’instruction.
object-typeobject-name (SPECIFIC NAME specific name) ATTEMPTED TO EXECUTE AN SQL STATEMENT sql-statement THAT IS NOT ALLOWED
Explication : Une procédure stockée ou une fonction définie par l’utilisateur a tenté d’exécuter une instruction SQL non autorisée.
object-type Le type d’objet :
Procédure stockée Une procédure stockée a émis une instruction SQL qui a forcé le thread Db2 à annuler l’unité de travail. L’instruction SQL qui a provoqué le placement du thread dans l’état MUST_ROLLBACK est COMMIT ou ROLLBACK : Toutes les autres instructions SQL sont rejetées jusqu’à ce que l’application SQL qui a émis l’instruction SQL CALL annule l’unité de travail. Lorsque le contrôle revient à l’application SQL qui a émis l’instruction SQL CALL, l’application SQL doit annuler l’unité de travail. Cela peut être fait en émettant une instruction SQL ROLLBACK ou l’opération IMS ou CICS® équivalente.
Fonction définie par l’utilisateur La fonction externe indiquée par object-name a émis une instruction COMMIT ou ROLLBACK.
object-name Le nom de l’objet.
specific-name Le nom de la fonction spécifique, qui est unique dans le schéma.
sql-statemen L’instruction SQL qui a été émise.
Action du système : La déclaration ne peut pas être traitée.
Réponse du programmeur : Supprimez toutes les instructions COMMIT et ROLLBACK de la procédure stockée ou modifiez l’application cliente afin qu’elle établisse un environnement permettant à la procédure stockée d’exécuter des instructions. Les procédures stockées appelées à distance peuvent exécuter des instructions COMMIT ou ROLLBACK intégrées si les conditions suivantes sont remplies :
La connexion avec le système demandeur doit utiliser des protocoles de validation en une phase.
Le système demandeur doit indiquer que les validations sont autorisées en envoyant une indication DRDA RDBCMTOK=TRUE lorsque la procédure stockée est appelée.
Pour les systèmes demandeurs Db2 Connect, l’application cliente doit utiliser des connexions Connect Type 1 ou Remote Unit of Work. D’autres connexions font que Db2 Connect indique que les validations ne sont pas autorisées, ce qui entraînera l’échec des instructions COMMIT et ROLLBACK dans une procédure stockée.
COBOL, 62 ans, testé positif au Coronavirus. Quelles sont les conséquences?
Cela fait déjà un an que nous traversons une crise planétaire. Elle aura impacté énormément de secteur dont celui du domaine informatique. Le phénomène marquant révélé dans ce milieu, c’est le manque de développeur dans le monde du Mainframe.
La pénurie de programmeurs Cobol a été mis en lumière dès lors que les premières évolutions de l’environnement des anciens systèmes ont été nécessaire dû à la Covid-19. L’un des pays qui en a le plus souffert n’est qu’autre que les États-Unis. Les obstacles rencontrés reflètent l’état d’esprit et la manière dont est perçu le Cobol en 2020/2021.
Courbe montrant le pic du chômage en 2020 – “Trumponomics en 7 graphiques” — REUTERS GRAPHICS
Effectivement, le manque de programmeur Cobol a été très marqué et même médiatisé. L’effet immédiat de la crise est la perte d’emploi qui va causer une augmentation de manière considérable le taux de chômage dans tout le pays (et dans le monde entier au passage). Le souci est que le système de gestion du chômage est géré par …. le Cobol! De tel changement nécessitent des mises à jours du système informatique.
C’est à ce moment précis que commence une série de mauvaises surprises. Premier constat, une grosse vague de développeur avait déjà pris leur retraite. Deuxième constat, il n’y a pas eu de remplacement prévu dû à cette vague. Troisième constat, il y a très peu de programmeurs Cobol disponible et pratiquement pas de jeune. Ce phénomène est dû au fait qu’un grand nombre d’Université n’enseigne plus ce langage estimant qu’il est devenu obsolète.
Le Gouverneur du New Jersey, Phil Murphy, à la recherche de programmeur COBOL
Cette mauvaise série a poussé les États concernés à médiatiser cette difficulté rencontrée afin d’avoir des renforts le plus rapidement possible. La solution express du moment est de rappeler les personnes volontaires et retraitées pour débloquer la situation. C’est une belle option mais seulement temporaire!
Cette crise sanitaire a la malheureuse réputation d’impacter les plus âgés (plus de 60 ans). On estime que la moyenne d’âge des experts Cobol se situe entre 55 et 60 ans. Ce qui fait que le domaine du Mainframe est directement touché par cette pandémie. Certains des développeurs les plus âgés ont contracté le virus, ce qui fait réduire encore plus les effectifs. De ce fait, la Covid-19 aura pointé du doigt le manque d’expert en Cobol et fait même affaiblir les équipes déjà en place.
La seule vraie solution est de former le plus grand nombre de développeur sur le langage afin d’assurer une relève et de transmettre le savoir et les compétences qui permettra de gérer les futurs projets. Que ce soit pour mettre à jour les systèmes actuels ou faire une potentielle migration vers un autre langage plus moderne, le nombre d’évolution ne désemplira pas.
Pourrions-nous éradiquer tous les symptômes dans le monde du Mainframe? Arriverons-nous à rectifier le tir et à apprendre de nos erreurs? Sommes-nous capable d’attirer plus de jeunes à ce langage longtemps considéré comme vieux et démodé? Une chose est sure, c’est que le Cobol reste un élément incontournable dans nos systèmes et aura un bel avenir devant lui. La Covid-19 a peut-être bien gagné cette petite bataille mais certainement pas la guerre. Espérons que les dispositifs mis en place porteront ces fruits et permettront de ne plus reproduire la même situation que nous avons traversé.
Sharif HAMED
J’espère que cet article vous a aidé à mieux comprendre comment est perçu le COBOL et les conséquences de cette perception. N’hésitez pas à partager si vous aimez et de donner votre avis sur le sujet. Cela m’encouragera à écrire d’autres articles concernant le monde du Mainframe.