Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2005, 15h32   #1
Membre éclairé
 
Inscription : juin 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 487
Points : 373
Points : 373
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 :
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?
aline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 15h49   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
il faut d'abord rechercher les écarts avec DBMS_RECTIFIER_DIFF.DIFFERENCES

Pour la suite, je cherche comment ça fonctionne
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h02   #3
Membre éclairé
 
Inscription : juin 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 487
Points : 373
Points : 373
oui Orafrance, tu as raison, je viens de m'en rendre compte.

Mais l'essai n'est toujours pas concluant.

Code :
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.
aline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h11   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h15   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h16   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Code :
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 :
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 :
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;
/
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h19   #7
Membre éclairé
 
Inscription : juin 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 487
Points : 373
Points : 373
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
aline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h20   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Code :
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 :
1
2
3
@DBMSR_CREATE
@DBMSR_DIFF
@DBMSR_RECTIFY


Citation:
DEPTNO DNAME LOC
---------- ------------------------------ ------------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 ESCD ORLANDO
60 RDBMS ORLANDO
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h20   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h31   #10
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Est-ce-qu'un MERGE ne ferait pas l'affaire ?


Laly.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued.

Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h47   #11
Membre éclairé
 
Inscription : juin 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 487
Points : 373
Points : 373
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 :
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 :
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?
aline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 16h50   #12
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Je crois pas que ce soit possible.

Code :
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.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued.

Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2005, 23h07   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Code :
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 05h09   #14
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
Source, Destination ?


Laly.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued.

Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 09h35   #15
Membre éclairé
 
Inscription : juin 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 487
Points : 373
Points : 373
Citation:
Envoyé par orafrance
Code :
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?
aline est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 09h37   #16
Rédacteur
 
Inscription : septembre 2004
Messages : 626
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 626
Points : 622
Points : 622
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.
__________________
In the heart of the truly greats, perfection is never achieved but endlessly pursued.

Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)
lalystar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h14.


 
 
 
 
Partenaires

Hébergement Web