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

PL/SQL Oracle Discussion :

PL/SQL SYS.DBMS_RECTIFIER_DIFF.RECTIFY


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut PL/SQL SYS.DBMS_RECTIFIER_DIFF.RECTIFY
    Bonjour,

    Je cherche à synchroniser des tables avec cette procédure.
    La phase de test est peu concluante. En effet, j'ai suivi toutes les recommandations de la doc, la procédure tourne, mais la réplication ne se fait pas!
    plutôt qu'un long discours, voici mon code
    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
     
    create table test.primaire ( a number, b varchar2(2));
    alter table TEST.PRIMAIRE
      add constraint PR_P primary key (A)
      using index 
     
     
     insert into primaire values (1, 'b'); 
     insert into primaire values (2, 'a'); 
     
    create table test.secondaire( a number, b varchar2(2));
     
    alter table TEST.SECONDAIRE
      add constraint PR_S primary key (A)
      using index 
     
     
     insert into secondaire values (4, 'd'); 
     
     
     
     
    create table test.missing_rows_data  ( a number, b varchar2(2));
     
    create table test.missing_rows_location ( present varchar2(128), absent varchar2(128), r_id rowid);
     
     
     
    BEGIN
       DBMS_RECTIFIER_DIFF.RECTIFY (
          sname1              =>   'TEST',
          oname1              =>   'PRIMAIRE',
          reference_site      =>   null,
          sname2              =>   'TEST',
          oname2              =>   'SECONDAIRE',
          comparison_site     =>    null,
          column_list         =>    null,
          missing_rows_sname  =>    'TEST',
          missing_rows_oname1 =>    'missing_rows_data',
          missing_rows_oname2 =>    'missing_rows_location',
          missing_rows_site   =>    null,
          commit_rows         =>     null);
    END;
    /
     
     
     
    select * from secondaire;
     
             A B
    ---------- --
             4 d
    et les deux tables de coordination sont nulles.
    Donc la procédure a bien fonctionné (pas d'erreurs) mais n'a pas fait son boulot!

    Une idée?

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    il faut d'abord rechercher les écarts avec DBMS_RECTIFIER_DIFF.DIFFERENCES

    Pour la suite, je cherche comment ça fonctionne

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    oui Orafrance, tu as raison, je viens de m'en rendre compte.

    Mais l'essai n'est toujours pas concluant.

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    create table test.primaire ( a number, b varchar2(2));
    alter table TEST.PRIMAIRE
      add constraint PR_P primary key (A)
      using index 
     
     
     insert into primaire values (1, 'b'); 
     insert into primaire values (2, 'a'); 
     
    create table test.secondaire( a number, b varchar2(2));
     
    alter table TEST.SECONDAIRE
      add constraint PR_S primary key (A)
      using index 
     
     
     insert into secondaire values (4, 'd'); 
     
     
     
     
    create table test.missing_rows_data  ( a number, b varchar2(2));
     
    create table test.missing_rows_location ( present varchar2(128), absent varchar2(128), r_id rowid);
     
    BEGIN
       DBMS_RECTIFIER_DIFF.DIFFERENCES (
          sname1              =>   'TEST',
          oname1              =>   'PRIMAIRE',
          reference_site      =>   '',
          sname2              =>   'TEST',
          oname2              =>   'SECONDAIRE',
          comparison_site     =>    '',
          where_clause        =>   '',      
          column_list         =>    '',
          missing_rows_sname  =>    'TEST',
          missing_rows_oname1 =>    'missing_rows_data',
          missing_rows_oname2 =>    'missing_rows_location',
          missing_rows_site   =>    '',
          max_missing         =>   500,      
          commit_rows         =>     '');
    END;
     
    SQL> select * from test.missing_rows_data;
     
             A B
    ---------- --
             1 b
             2 a
             4 d
     
     
     
     
     
    SQL> select * from missing_rows_location
     
     
    	PRESENT  ABSENT  LOCATION
     
    	RH	RH	AACDB9AA/AAACuYAAD	
    	RH	RH	AACDB9AA/AAACuYAAE
    	RH	RH	AACDB9AA/AAACuYAAF
     
     
    BEGIN
       DBMS_RECTIFIER_DIFF.RECTIFY (
          sname1              =>   'TEST',
          oname1              =>   'PRIMAIRE',
          reference_site      =>   null,
          sname2              =>   'TEST',
          oname2              =>   'SECONDAIRE',
          comparison_site     =>    null,
          column_list         =>    null,
          missing_rows_sname  =>    'TEST',
          missing_rows_oname1 =>    'missing_rows_data',
          missing_rows_oname2 =>    'missing_rows_location',
          missing_rows_site   =>    null,
          commit_rows         =>     null);
    END;
    jusqu'ici, tout marche bien, mais le problème c'est qu'après l'appel de cette procedure, les table secondaires ainsi que les deux tables de parametrages sont vides.

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    effectivement, il supprime de secondaire, les lignes qui ne sont pas dans primaire... essaye de mettre une des lignes de primaire dans secondaire et tu verras

    j'ai trouvé des scripts sympa, je suis en train de tester

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    bien, d'après les scripts fournis par oracle, j'ai le même comportement. A savoir qu'Oracle supprime toutes les lignes de la table à synchroniser qui ne sont pas dans la source

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    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
    rem script DBMSR_CREATE.SQL
    rem RUN THIS SCRIPT FIRST!
    rem
    set echo off
    set verify off
    set concat on
     
    prompt #################################################################
    prompt CREATE MISSING_ROWS_DATA AND MISSING_ROWS_LOCATION TABLES
    prompt #################################################################
    prompt
    prompt #################################################################
    prompt # 
    prompt # This script will ask for input to create two different
    prompt # tables that will be used to store and rectify differences
    prompt # between two replicas in the replicated environment.
    prompt # 
    prompt # INPUT:
    prompt #
    prompt # 1) SCHEMA to hold the MISSING ROWS tables.
    prompt # 2) Table1 >MISSING_ROWS_DATA..(Data for missing rows) 
    prompt # 3) Table2 >MISSING_ROWS_LOCATION..(Location of missing rows)
    prompt # 4) REFERENCE Table, the replication table that is being
    prompt #    Rectified.
    prompt # 
    prompt #################################################################
    prompt
    accept SCHEMA prompt 'Enter SCHEMA to hold the MISSING ROWS table: '
    prompt
    prompt
    prompt Example: MR_DATA_<table_name>
    accept MR_DATA1 prompt 'Enter name of MISSING ROWS DATA table: '
    prompt
    prompt Example:  MR_LOCATION_<table_name>
    accept MR_LOC1 prompt 'Enter name of the MISSING ROWS LOCATION table: '
    prompt
    prompt Example:  <schema.tablename>
    accept Table1 prompt 'Enter name of the REFERENCE table: '
     
    create table &SCHEMA..&MR_DATA1
       as select * from &TABLE1 where
       0=1;
     
    create table &SCHEMA..&MR_LOC1
       (
          present VARCHAR(128),
          absent  VARCHAR(128),
          r_id    ROWID
       );
     
    commit;
    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
    rem script DBMSR_DIFF.SQL
    rem RUN THIS SCRIPT SECOND!
    rem
    set echo off
    set verify off
    prompt
     
    REM  DBMS_RECTIFIER_DIFF.DIFFERENCES procedure compares two replicas of a
    REM  table, and determines all rows in the FIRST (REFERENCE) replica that
    REM  are not in the SECOND (COMPARISON) and all rows in the second that
    REM  are not in the first. The output of this procedure is stored in two
    REM  USER-CREATED tables. Table A stores the values of the missing rows,
    REM  and Table B is used to indicate which site contains each row.
     
    prompt #############################################################
    prompt DBMS_RECTIFIER_DIFF.DIFFERENCES
    prompt #############################################################
    prompt
    prompt The REFERENCE site will be used to update all other replicas
    prompt of the table as needed
    prompt #############################################################
    prompt
    accept SCHEMA1 prompt 'Enter name of schema on REFERENCE site: '
    accept OBJECT1 prompt 'Enter name of table on REFERENCE site: '
    accept REFERENCE1 prompt 'Enter name of REFERENCE site: '
    prompt
    accept SCHEMA2 prompt 'Enter name of schema on COMPARISON site: '
    accept OBJECT2 prompt 'Enter name of table on COMPARISON site: '
    accept COMPARISON2 prompt 'Enter name of COMPARISON site: '
    prompt
    accept MR_SCHEMA prompt 'Enter schema holding missing rows tables: '
    prompt Example: MR_DATA_<table_name>
    accept MR_DATA2 prompt 'Enter name of MISSING ROWS DATA table: '
    prompt
    prompt Example: MR_LOCATION_<table_name>
    accept MR_LOC2 prompt 'Enter name of the MISSING ROWS LOCATION table: '
    prompt
    accept SITE prompt 'Enter name of site that contains MISSING ROWS tables: '
    prompt
     
    BEGIN DBMS_RECTIFIER_DIFF.DIFFERENCES(
       sname1 => '&SCHEMA1',
       oname1 => '&OBJECT1',
       reference_site => '&REFERENCE1',
       sname2 => '&SCHEMA2',
       oname2 => '&OBJECT2',
       comparison_site => '&COMPARISON2',
       where_clause => '',
       column_list => '',
       missing_rows_sname => '&MR_SCHEMA',
       missing_rows_oname1 => '&MR_DATA2',
       missing_rows_oname2 => '&MR_LOC2',
       missing_rows_site => '&SITE',
       max_missing => 100,
       commit_rows => 50);
    END;
    /
    prompt
    prompt ################################################################
    prompt
    prompt You may now review your MISSING ROWS DATA table and your MISSING
    prompt ROWS LOCATION table to determine where the differences are
    prompt
    prompt ################################################################
    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
    rem script DBMSR_RECTIFY.SQL
    rem RUN THIS SCRIPT LAST!
    rem
    set echo off
    set verify off
    prompt
     
    REM  DBMS_RECTIFIER_DIFF.RECTIFY resolves the differences between two
    REM  tables. It uses the information generated by the DIFFERENCES
    REM  procedure to rectify the two tables. Any rows found in the FIRST
    REM  (REFERENCE) table and not in the SECOND(COMPARISON) table are
    REM  INSERTED into the SECOND table. Any rows found in the SECOND table
    REM  and not in the first are DELETED from the SECOND table.
     
    prompt #############################################################
    prompt DBMS_RECTIFIER_DIFF.RECTIFY
    prompt #############################################################
    prompt
    prompt The REFERENCE site will be used to update all other replicas
    prompt of the table as needed
    prompt #############################################################
    prompt
    accept SCHEMA1R prompt 'Enter name of schema on REFERENCE site: '
    accept OBJECT1R prompt 'Enter name of table on REFERENCE site: '
    accept REFERENCE1R  prompt 'Enter name of REFERENCE site: '
    prompt
    accept SCHEMA2R prompt 'Enter name of schema on COMPARISON site: '
    accept OBJECT2R prompt 'Enter name of table on COMPARISON site: '
    accept COMPARISON2R prompt 'Enter name of COMPARISON site: '
    prompt
    accept MR_SCHEMAR prompt 'Enter schema holding missing rows tables: '
    prompt
    prompt Example: MR_DATA_<table_name>
    accept MR_DATA1R prompt 'Enter name of MISSING ROWS DATA table: '
    prompt
    prompt Example:  MR_LOCATION_<table_name>
    accept LOC1R prompt 'Enter name of the MISSING ROWS LOCATION table: '
    prompt
    accept SITER prompt 'Enter name of site that contains MISSING ROWS tables: '
    prompt
     
    BEGIN DBMS_RECTIFIER_DIFF.RECTIFY(
       sname1 => '&SCHEMA1R',
       oname1 => '&OBJECT1R',
       reference_site => '&REFERENCE1R',
       sname2 => '&SCHEMA2R',
       oname2 => '&OBJECT2R',
       comparison_site => '&COMPARISON2R',
       column_list => '',
       missing_rows_sname => '&MR_SCHEMAR',
       missing_rows_oname1 => '&MR_DATA1R',
       missing_rows_oname2 => '&LOC1R',
       missing_rows_site => '&SITER',
       commit_rows => 50);
    END;
    /

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    oui, c'est normal qu'il supprime les lignes qui ne sont pas dans la source, par contre, il decrait les ajouter ce qu'il ne fait pas.


    Par contre, je viens de faire un nouveau test -concluant celui ci-.
    La procédure pose donc problème avec deux tables dans lla même base.
    par contre tout marche parfaitement avec deux tables dans des bases différentes !??????????????????


    allez comprendre des fois

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    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
    create table dept (deptno number, dname varchar2(30), loc  varchar2(30));
    alter table dept
      add constraint PR_P primary key (deptno)
      using index;
     
    create table dept_bis (deptno number, dname varchar2(30), loc  varchar2(30));
    alter table dept
      add constraint PR_P_BIS primary key (deptno)
      using index;
     
     
    insert into dept
    values (  10, 'ACCOUNTING',     'NEW YORK');
    insert into dept
    values (  20, 'RESEARCH',       'DALLAS');
    insert into dept
    values (  30, 'SALES',          'CHICAGO');
    insert into dept
    values (  40, 'OPERATIONS',     'BOSTON');
    insert into dept
    values (  50, 'ESCD',           'ORLANDO');
    insert into dept
    values (  60, 'RDBMS',          'ORLANDO');
    commit;
     
    insert into dept_bis
    values (  10, 'ACCOUNTING',     'NEW YORK');
    insert into dept_bis
    values (  20, 'RESEARCH',       'DALLAS');
    insert into dept_bis
    values (  30, 'SALES',          'CHICAGO');
    insert into dept_bis
    values (  40, 'OPERATIONS',     'BOSTON');
    insert into dept_bis
    values (  60, 'RDBMS',          'ORLANDO');
    insert into dept_bis
    values (  70, 'UNIX',           'ORLANDO');
    commit;
     
    alter table dept
      add constraint PR_P primary key (deptno)
      using index;
     
    alter table dept_bis
      add constraint PR_P_BIS primary key (deptno)
      using index;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @DBMSR_CREATE
    @DBMSR_DIFF
    @DBMSR_RECTIFY


    DEPTNO DNAME LOC
    ---------- ------------------------------ ------------------------------
    10 ACCOUNTING NEW YORK
    20 RESEARCH DALLAS
    30 SALES CHICAGO
    40 OPERATIONS BOSTON
    50 ESCD ORLANDO
    60 RDBMS ORLANDO

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par aline
    oui, c'est normal qu'il supprime les lignes qui ne sont pas dans la source, par contre, il decrait les ajouter ce qu'il ne fait pas.


    Par contre, je viens de faire un nouveau test -concluant celui ci-.
    La procédure pose donc problème avec deux tables dans lla même base.
    par contre tout marche parfaitement avec deux tables dans des bases différentes !??????????????????


    allez comprendre des fois
    Etrange effectivement

  10. #10
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Est-ce-qu'un MERGE ne ferait pas l'affaire ?


    Laly.

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Laly, tu es un génie!

    Je ne connaissais tout betement pas le merge.

    c'est même beaucoup mieux, car la procédure diff ne marche pas si la table est référencée par une clée étrangère (elle fair un delete insert au lieu d'un update)

    Par contre j'ai une autre question.

    en reprenant ton example, il suffit d'écrire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      MERGE INTO secondaire D
       USING (SELECT * from primaire) S
       ON (D.a = S.a)
       WHEN MATCHED THEN UPDATE SET D.b = s.b
       WHEN NOT MATCHED THEN INSERT (D.a, D.b)
       VALUES (S.a, s.b)

    malheureusement;, j'ai des table savec beaucoup de colonnes et j'aimerai pouvoir mettre un * ou un row à la place d'une énumération des colonnesà updater ou à inserer.

    quelque chose de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       MERGE INTO secondaire D
       USING (SELECT * from primaire) S
       ON (D.a = S.a)
       WHEN MATCHED THEN UPDATE SET D.row = s.row
       WHEN NOT MATCHED THEN INSERT    VALUES S.row
    tu sais comment faire?

  12. #12
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Je crois pas que ce soit possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MERGE INTO secondaire D 
       USING primaire S 
       ON (D.a = S.a) 
       WHEN MATCHED THEN UPDATE SET D.b = s.b 
       WHEN NOT MATCHED THEN INSERT (D.a, D.b) 
       VALUES (S.a, s.b)
    Tu n'as pas besoin de faire un select * from primaire.
    Tu ne peux pas mettre à jour (ou tenter de mettre à jour) les colonnes présentes dans le ON.


    Laly.

  13. #13
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MERGE INTO secondaire D 
       USING primaire S
    D = secondaire
    S = primaire

    dés fois je ne comprends pas tout sur ce forum

    Bien vu le MERGE

  14. #14
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Source, Destination ?


    Laly.

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par orafrance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MERGE INTO secondaire D 
       USING primaire S
    D = secondaire
    S = primaire

    dés fois je ne comprends pas tout sur ce forum

    Bien vu le MERGE
    Je ne comprends pas Orafrance, j'ai essayé ta requête et j'obtient un ORA 969 missing on keyword.


    Sinon, une autre question.
    Le merge ne retire pas les lignes de secondaire qui ne sont pas dans primaire.
    N'y aurait-il pas une solution pour cela?

  16. #16
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Bonjour Aline,


    Le MERGE marche à sens unique : tu as une table A et une table temporaire TMP.
    MERGE met à jour les enregistrements de A par leur valeur dans TMP et insère dans A les lignes de TMP qui ne sont pas dans A.

    A la fin, toutes les lignes de TMP sont dans A...


    Laly.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. L'avenir du BDE et des SQL Links révélé ! <officiel>
    Par Merlin dans le forum Bases de données
    Réponses: 12
    Dernier message: 02/06/2006, 10h18
  2. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  3. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42
  4. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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