Erreur SQL 55019

11-12-2006 à 17:22:12
Bonjour à tous,

J'utilise SQL sur iSeries depuis peu de temps.
La lecture des tables SQL fonctionne à merveille
mais dès que je veux ajouter par INSERT INTO,
rien ne s'ajoute et SQL renvoie le code 55019 dans SQLSTT.

Cette erreur est surement basique mais malgré mes recherches
je ne trouve pas grand chose sur le sujet.

Merci aux experts du SQL pour votre réponse trés atendue.


  • Liens sponsorisés



04-12-2006 à 12:09:35
Basique, certes !

Le statut SQL 55019, qui correspond au SQLCOD -7008, indique une opération invalide, probablement liée à une table journalisée.

Je suppose que tu fais ton INSERT sous STRSQL ? Alors, après l'insert, il faut faire COMMIT pour valider l'insertion. Sans cela, en quittant SQL, un ROLLBACK implicite est effectué.

Si cela ne convient pas, va voir le détail du message en faisant <Aide> sur la ligne du message d'erreur. La réponse est indiquée dans le message de second niveau.

04-12-2006 à 14:20:51
Merci Philippe pour ta réponse, je vais tester celà en fin
de journée.

Mais en fait mon INSERT est placé dans une source RPG IV,
donc dois-je aussi effectuer un COMMIT dans ce cas ?.

Je teste et je t'informe du résultat.



04-12-2006 à 17:28:26
Bien entendu !

Ce n'est pas le lieu ou " l'endroit " où l'instruction apparaît qui importe. Si la table est journalisée, il faut faire un Exec Sql COMMIT End-Exec pour valider ou un Exec Sql ROLLBACK End-Exec pour invalider dans la table.
05-12-2006 à 22:02:08
Bonjour,

Merci Philippe pour ta dernière réponse.

Alors après mes nouveaux essais l'INSERT ne fonctionne
toujours pas dans mon RPG et le COMMIT est sans effet.

Des PTF seront bientôt installés sur la machine.

Affaire à suivre.
06-12-2006 à 11:10:57
Colle ici ton INSERT, tel qu'il est dans le programme, pour qu'on y voie plus clair.
11-12-2006 à 09:07:13
Colle ici ton INSERT, tel qu'il est dans le programme, pour qu'on y voie plus clair.


Voilà le code RPG qui me semble bon.

C/exec sql
C+ INSERT INTO CLIENTS (C1CDCLI, C1NMCLI, C1ADRESSE1,
C+ C1ADRESSE2, C1ADRESSE3, C1CDPOSTAL, C1VILLE, C1MTCDE)
C+ VALUES(8520, 'nom 8520', 'A1', 'A2', 'A3', '75000', 'ville',
C+ 72825)
C/end-exec

C SQLSTT DSPLY


En manuel par STRSQL cet insert fonctionne très bien.
Par contre dans le RPG le display de SQLSTT
affiche toujours l'erreur 55019 et rien n'est ajouté dans CLIENTS.

Merci Philippe pour ton aide.
11-12-2006 à 09:44:23
[quote]Colle ici ton INSERT, tel qu'il est dans le programme, pour qu'on y voie plus clair.


Voilà le code RPG qui me semble bon.

C/exec sql
C+ INSERT INTO CLIENTS (C1CDCLI, C1NMCLI, C1ADRESSE1,
C+ C1ADRESSE2, C1ADRESSE3, C1CDPOSTAL, C1VILLE, C1MTCDE)
C+ VALUES(8520, 'nom 8520', 'A1', 'A2', 'A3', '75000', 'ville',
C+ 72825)
C/end-exec

C SQLSTT DSPLY


En manuel par STRSQL cet insert fonctionne très bien.
Par contre dans le RPG le display de SQLSTT
affiche toujours l'erreur 55019 et rien n'est ajouté dans CLIENTS.

Merci Philippe pour ton aide. [/quote]

***************************************************

Philippe ne cherche plus, je viens de trouver à l'instant la solution:
Au lancement du CRTSQLRPGI il faut mettre le paramètre COMMIT
à *NONE.

Et maintenant je peux ajouter dans ma table.

Bon, cette petite découverte va me rendre plus précis
dans l'utilisation de SQL.

D'autre part, merci aussi Pilippe pour le complément sur
les index utilisateurs. Je vais étudier cette technique.

Bonne semaine à tous.

*****************************************************
11-12-2006 à 09:46:44
Bonjour,

si ton fichier n'est pas journalisé (ce que j'en déduis si ton commit ne fait rien), tu dois indiquer que l'exécution de tes ordres SQL n'est pas soumise au contrôle de validation commit/rollback.
un simple
"C/Exec Sql
C+ Set Option Commit = *NONE
C/End-Exec"
devrait suffire.
Tu peux également l'indiquer lors de la compilation (paramètre COMMIT avec valeur *NONE) de ton programme mais je n'aime personnellement pas cette solution car la valeur par défaut de la commande peut changer selon la machine, on peut oublier,...

Voilà, j'espère t'avoir aider.
Tiens nous au courant.

Wilfrid.
11-12-2006 à 10:22:52
Erreur on ne peut plus bâteau...

Un dernier conseil:
Si dans votre boîte, vous n'utilisez pas la journalisation ni le contrôle de validation dans vos programmes (commit/rollback), alors passez le paramètre COMMIT(*CHG) à COMMIT(*NONE) par défaut sur TOUTES les commandes de compilation avec la commande CHGCMDDFT (Change Command Default)
11-12-2006 à 17:22:12
Bonjour,

INSERT et UPDATE fonctionnent sans problème maintenant.

Merci Wilfrid pour ta réponse précise.
Merci Philippe pour tes différentes réponses. En particulier la valeur par défaut du paramètre COMMIT que je vais appliquer très vite.

A bientôt sur ce forum du System i.
  • Liens sponsorisés