Salut,

Voici l'extrait de Package qui compile impec et qui s'exécute depuis .net

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
82
83
84
85
86
 
PROCEDURE GetCreate_BHR_BREACH_PED(
    pThresholdType IN NUMBER,
    pID_BREACH_MAIN IN NUMBER,
    pTreatmentDate IN DATE,
    pNominal IN NUMBER,
    pAmount IN NUMBER,
    pLEGAL_RATIO IN NUMBER
)
IS
    vID_BREACH_PED NUMBER := null;
BEGIN
    BEGIN
        SELECT P.ID_BREACH_PED INTO
            vID_BREACH_PED
        FROM
            BHR_BREACH_PED P
        WHERE
            P.FK_BREACH_MAIN = pID_BREACH_MAIN
            AND
            P.FK_TYP_BREACH = pThresholdType
            AND
            P.FK_PED_STATUS = 1;
            exception
                when NO_DATA_FOUND then
                    vID_BREACH_PED := null;
    END;
 
    IF (vID_BREACH_PED is null) THEN
        --Creation de l'enregistrement 
        INSERT INTO BHR_BREACH_PED ( 
            FK_BREACH_MAIN,
            IS_ARCHIVED,
            FK_TYP_BREACH,
            FK_PED_STATUS,
            START_DATE,
            RM_MSG
        ) VALUES (
            pID_BREACH_MAIN,
            'N',
            pThresholdType,
            1,
            pTreatmentDate,
            ''
        ) returning BHR_BREACH_PED.ID_BREACH_PED into vID_BREACH_PED;
    END IF;
    -- Creation de l'element
    MERGE INTO BHR_BREACH_PED_ITM P1
    USING
        (
            SELECT
                Ptmp.ID_BREACH_PED_ITM,
                Ptmp.FK_BREACH_PED,
                Ptmp.DATE_RATIO,
                Ptmp.NOMINAL,
                Ptmp.AMOUNT
            FROM
                BHR_BREACH_PED_ITM Ptmp
            WHERE
                Ptmp.FK_BREACH_PED = vID_BREACH_PED
                AND
                Ptmp.DATE_RATIO = pTreatmentDate
        ) P2 ON 
        (
            P1.ID_BREACH_PED_ITM = P2.ID_BREACH_PED_ITM
        )
    WHEN MATCHED THEN
        UPDATE SET
            P1.NOMINAL = pNominal,
            P1.AMOUNT = pAmount,
            P1.LEGAL_RATIO = pLEGAL_RATIO
    WHEN NOT MATCHED THEN
        INSERT (
          FK_BREACH_PED,
          DATE_RATIO,
          NOMINAL,
          AMOUNT,
          LEGAL_RATIO
        ) VALUES (
          vID_BREACH_PED,
          pTreatmentDate,
          pNominal,
          pAmount,
          pLEGAL_RATIO
        );
END;
Je n'arrive pas à m'expliquer pourquoi mais la procédure semble s'exécuter jusqu'à la création de l'enregistrement BHR_BREACH_PED et le Merge n'ajoute rien et ne met rien à jour car je clean les tables avant de commencer mon test.

D'après vous, j'ai fait une bêtise ?

Je précise que la table BHR_BREACH_PED_ITM a une séquence qui incrémente sa clé primaire...

D'avance merci

Laurent