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 :

Comment traduire la fonction merge d'Oracle en PostgreSQL ?


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Comment traduire la fonction merge d'Oracle en PostgreSQL ?
    bonjour,
    je suis entrain de migrer un script oracle vers postgré.
    je bloque sur la fonction merge oracle qui n'existe pas sur la version postgré que j'utilise .

    comment traduire ce script sous postgré ??

    voici le script oracle à traduire :
    merci d'avance

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    MERGE INTO NEDAP.IMPORT using (select * from NEDAP.HRMS_RECEPTION_TMP where HRMS_RECEPTION_TMP.MOTIF_DEMANDE is null) H
    ON (IMPORT.TIMESTAMP = H.DATE_JOUR_EXTRACTION_HRMS
    AND IMPORT.PERSONNELNR = H.LOGIN
    )
    WHEN MATCHED THEN UPDATE
    SET
    IMPORT.STATUS              = 'MAJ'
    WHEN NOT MATCHED THEN INSERT
    (
    IMPORT.ID                         ,
    IMPORT.IMPORT_FUNCTION            ,
    IMPORT.CARRIERTYPE                ,
    IMPORT.LASTNAME                   ,
    IMPORT.INITIALS                   ,
    IMPORT.MIDDLENAME                 ,
    IMPORT.GENDER                     ,
    IMPORT.TITLE                      ,
    IMPORT.PERSONNELNR                ,
    IMPORT.DEPARTMENTNAME             ,
    IMPORT.COMPANY                    ,
    IMPORT.IDENTIFICATION             ,
    IMPORT.WEIGHT                     ,
    IMPORT.LICENSENUMBER              ,
    IMPORT.CARNUMBER                  ,
    IMPORT.OWNER_PERSONNELNR          ,
    IMPORT.UNIT                       ,
    IMPORT.PHONENUMBER                ,
    IMPORT.ARRIVALDATETIME            ,
    IMPORT.LEAVEDATETIME              ,
    IMPORT.CONTACTPERSON_PERSONNELNR  ,
    IMPORT.FREEFIELDID                ,
    IMPORT.FREEFIELDDATA              ,
    IMPORT.VENDOR_CODE                ,
    IMPORT.PICTURE_FILE               ,
    IMPORT.BADGETYPE                  ,
    IMPORT.BADGENUMBER                ,
    IMPORT.BLOCKED                    ,
    IMPORT.TEMPORARYBADGETYPE         ,
    IMPORT.TEMPORARYBADGENUMBER       ,
    IMPORT.VERIFIERTYPE               ,
    IMPORT.VERIFIERID                 ,
    IMPORT.ACCESSDURINGHOLIDAYS       ,
    IMPORT.TEMPLATE                   ,
    IMPORT.ENTRANCENAME               ,
    IMPORT.ENTRANCEGROUPNAME          ,
    IMPORT.DATETIMESCHEDULENAME       ,
    IMPORT.VALIDFROM                  ,
    IMPORT.VALIDTO                    ,
    IMPORT.DISABLED                   ,
    IMPORT.COUNTGROUP                 ,
    IMPORT.PRESENCETIME               ,
    IMPORT.NRMOVEMENTS                ,
    IMPORT.CANBEAPPPERSON             ,
    IMPORT.CARRIERGROUP               ,
    IMPORT.MOBILEPHONENUMBER          ,
    IMPORT.EMAIL                      ,
    IMPORT.CANBEGUARD                 ,
    IMPORT.LANGUAGE                   ,
    IMPORT.USERNAME                   ,
    IMPORT.ISREADONLY                 ,
    IMPORT.STATUS                     ,
    IMPORT.TIMESTAMP                  ,
    IMPORT.ERRORCODE                  ,
    IMPORT.ISACTIVE                   ,
    IMPORT.EXTERNALBADGENUMBER        ,
    IMPORT.BLOCKREASON                ,
    IMPORT.VIOLATON                   ,
    IMPORT.VIOLATONTYPE               ,
    IMPORT.DESCRIPTION                
    )

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Il ne s'agit pas d'une fonction mais d'un opérateur normalisé du langage SQL qui permet de faire de l'INSERT/UPDATE/DELETE combiné.
    Ce qui est visé par :
    • la jointure entre table source et table cible + filtre éventuel (dans votre cas aucun) est l'objet d'une modification (UPDATE)
    • dans le cas contraire la mise à jour est une insertion.


    Donc faire deux requêtes (UPDATE et INSERT) en utilisant le niveau d'isolation SERIALIZABLE.

    A +

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    merci pour vos explications. je ne connaissais pas du tout MERGE.
    Je vais essayer de faire deux requtes UPDATE ET INSERT
    merci beaucoup

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 037
    Points : 23 781
    Points
    23 781
    Par défaut
    Bonjour,

    Vous pouvez aussi utiliser la clause ON CONFLICT ON ... DO UPDATE... de l'instruction INSERT.

    ced

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2020
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Super ,
    merci je vais rajouter cela dans mon code

    Postgre

Discussions similaires

  1. Comment traduire cette fonction en Delphi
    Par bouh25 dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/06/2016, 18h18
  2. Réponses: 6
    Dernier message: 31/12/2015, 10h19
  3. Problème avec une fonction MERGE sous oracle
    Par coulpie_myri dans le forum Oracle
    Réponses: 2
    Dernier message: 28/05/2010, 20h46
  4. Réponses: 1
    Dernier message: 22/10/2007, 12h09
  5. Comment chronométrer une fonction
    Par 323 dans le forum Pascal
    Réponses: 3
    Dernier message: 19/03/2003, 20h24

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