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
    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

    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 +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Candidat au Club
    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
    Rédacteur/Modérateur

    Bonjour,

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

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Candidat au Club
    Super ,
    merci je vais rajouter cela dans mon code

    Postgre

###raw>template_hook.ano_emploi###