IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

Transaction dans une requete SQL


Sujet :

DB2

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Par défaut Transaction dans une requete SQL
    Bonjour,

    Je dois migrer une application web crée en ASP/MSSQL vers ASP/DB2 (AS400) mais j'ai quelque soucis avec les transactions.

    Quand j'essaye de l'executer il me ramene une serie d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BEGIN TRANSACTION; 
    UPDATE x453CBTF.incival WITH (tablockx) SET descid = descid + 1; 
    insert into x453CBTF.incidesc (indeid, indedesc, indedepa) SELECT (SELECT MAX(descid) as id from x453CBTF.incival),'test', 'test'; 
    IF @@ERROR = 0 
    COMMIT TRANSACTION;
    ELSE 
    ROLLBACK TRANSACTION;
    Apres avoir effectué des recherches, j'ai appris que DB2 ne supportait les transactions... Y a t'il qqch de similaire sur DB2?

    D'avance merci.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Il faudrait créer à la place

    1/ soit une procédure stockée.

    Compiler les PS avec la commande RUNSQLSTM. Par défaut, les PS sont compilées dans le bibliothèque pointée par la *CURLIB du job.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    DROP PROCEDURE MaPS;
     
    CREATE PROCEDURE MaPS( IN MaBib Varchar(10), 
                                                        Out Erreur dec(1, 0) )       
    LANGUAGE SQL                   
    BEGIN
    Set Erreur = 0;
    UPDATE MaBib.incival SET descid = descid + 1; 
    INSERT INTO MaBib.incidesc (indeid, indedesc, indedepa) SELECT (SELECT MAX(descid) AS id FROM MaBib.incival),'test', 'test'; 
    IF SQLSTT = 0 Then 
       COMMIT;
       Set Erreur = 0;
    ELSE 
       ROLLBACK;
       Set Erreur = -1;
    END IF;
    END
    Puis l'appeler par exemple dans un programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Exec SQL Call MaPS(x453CBTF, :Erreur);
      if Erreur < 0;
        Anomalie...
    2/ soit un membre

    Si les infos sont toutes "en dur" dans SQL, une autre solution consiste à placer les instructions SQL dans un membre source et d'exécuter son contenu par la commande RUNSQLSTM mais PAS de paramétrage ni de tests (IF THEN ELSE END IF) possibles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE x453CBTF.incival SET descid = descid + 1; 
    INSERT INTO x453CBTF.incidesc (indeid, indedesc, indedepa) SELECT (SELECT MAX(descid) AS id FROM x453CBTF.incival),'test', 'test';
    3/ soit créer la PS via iSeries (ou IBM i) Navigator...

Discussions similaires

  1. utilisation du contenu d'un champ edit dans une requete sql
    Par amri2006 dans le forum C++Builder
    Réponses: 2
    Dernier message: 23/01/2006, 16h05
  2. [MySQL] Comparer des info date dans une requete SQL
    Par kaygee dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 06/01/2006, 21h56
  3. pb de guillemet dans une requete SQL
    Par linouline dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/12/2005, 11h38
  4. [JDBC]Caractères spéciaux dans une requete SQL
    Par frizby dans le forum JDBC
    Réponses: 2
    Dernier message: 28/11/2005, 18h01
  5. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo