Bonjour,

Je viens d'écrire une procédure pour importer des données depuis une vue MariaDB vers une table Oracle via un MERGE.

Voici l'erreur que j'obtiens :
ORA-12899: valeur trop grande pour la colonne "ENFA"."ETUDIANT_PEF"."ID_INDIVIDU" (réelle : 52, maximum : 13)
ORA-06512: à "ENFA.PR_IMPORT_PEF_CARTE_MUT", ligne 36
ORA-06512: à ligne 2
La colonne en question a bien une longueur 13 dans les 2 BDD ; comment peut-il me dire qu'il trouve une longueur de 52 ?
Il n'y a pour le moment que deux lignes à importer et les données sont valides.

Voici la procédure :
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
CREATE OR REPLACE PROCEDURE PR_IMPORT_PEF_CARTE_MUT 
-- -------------------------------------------------------------------------------------- --
-- Procédure d'import des étudiants depuis la BDD MariaDB pef pour la vue grhum.v_sgc_etu --
-- -------------------------------------------------------------------------------------- --
--
-- @author : Philippe Leménager
-- @version : V0.1 - plemenager - 2021-09-07 - Création
--
-- Utilise :
-- - Table enfa.etudiant_pef
-- - DB_LINK pef
-- - Vue pef.v_carte_mut sur MariaDB (serveur dev.ensfea.fr en test ou sgbdlan.ensfea.fr en prod)
-- ----------------------------------------------------------------------------------------------
IS
    annee_universitaire integer;
    mois_actuel integer;
 
BEGIN
    -- Calcul de l'année universitaire
    SELECT EXTRACT(MONTH FROM CURRENT_DATE) INTO mois_actuel FROM dual;
 
    IF mois_actuel > 6 THEN 
        SELECT EXTRACT(YEAR FROM CURRENT_DATE) INTO annee_universitaire FROM dual;
    ELSE
        SELECT EXTRACT(YEAR FROM CURRENT_DATE) - 1 INTO annee_universitaire FROM dual;
    END IF;
 
    -- Récupération de la vue pef.v_carte_mut
    MERGE INTO enfa.etudiant_pef e
    USING
    (
        SELECT "id_individu", "civilite", "nom_usuel", "nom_patronymique", "prenom", "date_naissance", "ine", "date_debut_validite", "droit_photo", "droit_import",
            "e_mail", "code_nationalite", "adresse1", "adresse2", "adresse3", "code_postal", "ville", "code_pays", "autre_adresse1", "autre_adresse2", "autre_adresse3", 
            "autre_code_postal", "autre_ville", "autre_code_pays", "telephone1", "telephone2", "niveau", "code_sise_formation", "formation", "echange_internationaux",
            "sens_echange", "date_inscription", "annee_universitaire", "civilite2"
        FROM "v_carte_mut"@pef
        WHERE "annee_universitaire" = annee_universitaire
    ) i
    ON (i."id_individu" = e.id_individu)
    WHEN MATCHED THEN
        UPDATE SET 
            e.civilite = i."civilite",
            e.date_debut_validite = i."date_debut_validite",
            e.droit_photo = i."droit_photo",
            e.droit_import = i."droit_import",
            e.code_nationalite = i."code_nationalite",
            e.adresse1 = i."adresse1",
            e.adresse2 = i."adresse2",
            e.adresse3 = i."adresse3",
            e.code_postal = i."code_postal",
            e.ville = i."ville",
            e.code_pays = i."code_pays",
            e.autre_adresse1 = i."autre_adresse1",
            e.autre_adresse2 = i."autre_adresse2",
            e.autre_adresse3 = i."autre_adresse3",
            e.autre_code_postal = i."autre_code_postal",
            e.autre_ville = i."autre_ville",
            e.autre_code_pays = i."autre_code_pays",
            e.telephone1 = i."telephone1",
            e.telephone2 = i."telephone2",
            e.niveau = i."niveau",
            e.code_sise_formation = i."code_sise_formation",
            e.formation = i."formation",
            e.echange_internationaux = i."echange_internationaux",
            e.sens_echange = i."sens_echange",
            e.date_inscription = i."date_inscription",
            e.annee_universitaire = i."annee_universitaire",
            e.civilite2 = i."civilite2"
    WHEN NOT MATCHED THEN
        INSERT (id_individu, civilite, nom_usuel, nom_patronymique, prenom, date_naissance, ine, date_debut_validite, droit_photo, droit_import, 
            e_mail, code_nationalite, adresse1, adresse2, adresse3, code_postal, ville, code_pays, autre_adresse1, autre_adresse2, autre_adresse3, 
            autre_code_postal, autre_ville, autre_code_pays, telephone1, telephone2, niveau, code_sise_formation, formation, echange_internationaux,
            sens_echange, date_inscription, annee_universitaire, civilite2)
        VALUES (i."id_individu", i."civilite", i."nom_usuel", i."nom_patronymique", i."prenom", i."date_naissance", i."ine", i."date_debut_validite", i."droit_photo", i."droit_import", 
            i."e_mail", i."code_nationalite", i."adresse1", i."adresse2", i."adresse3", i."code_postal", i."ville", i."code_pays", i."autre_adresse1", i."autre_adresse2", i."autre_adresse3", 
            i."autre_code_postal", i."autre_ville", i."autre_code_pays", i."telephone1", i."telephone2", i."niveau", i."code_sise_formation", i."formation", i."echange_internationaux",
            i."sens_echange", i."date_inscription", i."annee_universitaire", i."civilite2");
 
END PR_IMPORT_PEF_CARTE_MUT;
Quand j'exécute seulement le SELECT du USING, j'obtiens les bonnes données et l'id_individu a une longueur de 13.