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

Requêtes PostgreSQL Discussion :

Variable avec Postgre


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 24
    Par défaut Variable avec Postgre
    Bonjour,

    avec Mysql j'ai une requête contenant une variable afin de gagner du temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    START TRANSACTION;
    SET @dossier_id := 206879; DELETE FROM pretemporaire WHERE id_dossier = @dossier_id; 
    DELETE FROM mactist WHERE dossier_id = @dossier_id; 
    update mactist set volu1 ='10' where do_id = @dossier_id; 
    COMMIT;
    J'ai juste à renseigner la valeur de la variable @dossier_id et la requete passe sans problème

    je n'arrive pas à faire la même chose avec Postgre. Quelqu'un a une idée.
    Merci

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 137
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Vous pouvez également déclarer une CTE contenant la liste des dossiers à supprimer et faire une équijointure avec cette CTE (avec la syntaxe particulière "using" propre à PostGre), plus pratique dans le cas où il peut y avoir plusieurs dossiers.

    Exemple :

    Code SQL : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    CREATE TABLE T1
       (  T1ID SERIAL
        , T1C4 CHAR(4) not null
        , T1DT DATE    not null
        , PRIMARY KEY(T1ID)
       )
    ;
    insert INTO T1(T1C4, T1DT)
    values ('AAAA', '2021-06-11')
         , ('BBBB', '2022-04-20')
         , ('BBBB', '2022-04-30')
         , ('CCCC', '2019-11-04')
         , ('TRUC', '2022-01-07')
         , ('TRUC', '2022-01-15')
         , ('TRUC', '2022-02-01')  
         , ('TRUC', '2022-02-08')    
         , ('ZZZZ', '2025-08-11')
    ;
    select * from T1
    ;
    with CTE1(CTID) as
        (select 7  union all
         select 8)
    delete from T1
    using  CTE1
    where  CTE1.CTID=T1.T1ID
    ;
    select * from T1
    ;


    Résultat :

    Nom : Sans titre.png
Affichages : 27
Taille : 5,4 Ko


    Mais le plus souvent, on cible les lignes à traiter selon des critères fonctionnels peu importe l'identifiant qui est une donnée technique inconnue de l'utilisateur (en particulier dans le cas où l'on a affaire à une colonne ayant la propriété "serial" ou "identity")
    Dans l'exemple ci-dessous, je cherche à traiter les lignes de "TRUC" si la date est supérieure au 31 janvier 2022, le résultat obtenu est le même :

    Code SQL : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CREATE TABLE T2
       (  T2ID SERIAL
        , T2C4 CHAR(4) not null
        , T2DT DATE    not null
        , PRIMARY KEY(T2ID)
       )
    ;
    insert INTO T2(T2C4, T2DT)
    values ('AAAA', '2021-06-11')
         , ('BBBB', '2022-04-20')
         , ('BBBB', '2022-04-30')
         , ('CCCC', '2019-11-04')
         , ('TRUC', '2022-01-07')
         , ('TRUC', '2022-01-15')
         , ('TRUC', '2022-02-01')  
         , ('TRUC', '2022-02-08')    
         , ('ZZZZ', '2025-08-11')
    ;
    select * from T2
    ;
    with CTE1 (COL1, COL2, COL3) as
        (select T2ID, T2C4, T2DT 
         from T2
         where T2C4='TRUC'
           and T2DT>'2022-01-31'
        )
    delete from T2
    using  CTE1
    where  CTE1.COL1=T2.T2ID
    ;
    select * from T2
    ;


    cf. DB fiddle ICI

Discussions similaires

  1. [VB.NET] Problem de récupération de variable avec une DLL
    Par ludovic85 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 19/01/2005, 11h37
  2. Réponses: 4
    Dernier message: 28/10/2004, 10h57
  3. Variable avec saut de ligne à l'intérieur
    Par MaTHieU_ dans le forum Langage
    Réponses: 2
    Dernier message: 09/08/2004, 22h39
  4. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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