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 :

Insert dans une vue trop long


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut Insert dans une vue trop long
    Bonjour,

    Voilà, je développe une API en c++ qui fait des INSERT en Base de donnée(ORACLE) dans une vue. Les performances de l'API sont ralentis à cause des INSERT dans cette vue. (550ms par insert multiplier par le nombre d'insert ça augmente très vite..)
    Cette vue comprend 87 colonnes. Avec des triggers INSTEAD OF à chaque INSERT.
    Il s'agit d'un INSERT de 87 colonnes d'une seul ligne.

    Es-ce pour vous normal qu'un simple INSERT prenne 550ms/~ ? Y a t-il une façon de gagner un peut de temps ?

    Merci,

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Quelle est la taille des données de ton INSERT?
    Il nous faudrait un exemple précis car cela peut aller de 100 octets à 100 Mo voir plus s'il y a des LOB.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Y a-t-il de nombreux index sur la table, ça peut aussi expliquer la lenteur des insert

  4. #4
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Bonjour, merci pour vos réponses rapide.

    Voici un exemple de requête :

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
        INSERT INTO telco.v_duct (
            label_reference,
            depth,
            record_modification_date,
            administrator_id_fk,
            to_create_date,
            ch_client_amont,
            record_creation_date,
            project_id_fk,
            owner_id_fk,
            retirement_date,
            nature_id_fk,
            state_desc,
            implementation_date,
            last_maintenance_date,
            diameter_int,
            status_desc,
            bond_type_id_fk,
            asset_id,
            client_name,
            ref_code4,
            color_code_out,
            additive_rate,
            ch_aval,
            ref_code2,
            pipe_nature_desc,
            color_id_fk,
            pipe_state_desc,
            ch_amont,
            border_color_desc,
            duct_position2,
            occupant_id_fk,
            starting_date,
            ch_client_aval,
            record_creation_user,
            own_organization_name,
            adm_organization_name,
            developer_id_fk,
            ref_code1,
            existing_date,
            retirement_reason,
            real_occupation_rate,
            duct_name,
            occupation_rate,
            wire_number,
            from_mask_id_fk,
            state_id_fk,
            availability_id_fk,
            recol_date,
            owner_type_id_fk,
            owner_type_desc,
            routing_date,
            ext_id,
            dev_organization_name,
            duct_comment,
            issubduct,
            matrice_row_beg,
            matrice_col_end,
            border_color_id_fk,
            object_state_id_fk,
            status_id_fk,
            color_code_in,
            occ_organization_name,
            asb_length,
            matrice_row_end,
            matrice_col_beg,
            duct_image,
            pipe_state_id_fk,
            project_date,
            record_modification_user,
            amont,
            project_desc,
            display_name,
            disponibility_rate,
            duct_position1,
            bond_type_desc,
            pipe_color_desc,
            additive_occupation,
            subduct_number,
            diameter_ext,
            ext_ori_id,
            to_mask_id_fk,
            availability_desc,
            bond_number,
            cleaning_date,
            aval,
            ref_code3,
            bond_distance
        ) VALUES (
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            1,
            NULL,
            NULL,
            NULL,
            300,
            NULL,
            NULL,
            20298,
            NULL,
            NULL,
            'PVC',
            NULL,
            NULL,
            NULL,
            NULL,
            0,
            NULL,
            NULL,
            'Aucune',
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            0,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            'BIBEQUIPMENT:\Mask_pipe\PVC300.gif',
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            'PVC300',
            NULL,
            NULL,
            NULL,
            '-- Non renseigné --',
            NULL,
            NULL,
            300,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL,
            NULL
        )
    Dans ma table j'ai 16 index.

    Je viens de supprimer tous les index de ma table pour faire un test ... Aujourd'hui un seul INSERT prend 1000 ms sans index.

    Merci,

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Il y a peut être un problème de modélisation pour avoir autant de colonnes dans une table dont si peu sont renseignées...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Oui, il y a sûrement un gros problème à ce niveau. C'est pour mon entreprise je ne peux donc pas changer la modélisation de cette table...

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Je réagis qu'il s'agit d'une vue et non d'une table.
    Cela signifie sans doute que derrière cette vue il y a plusieurs tables et un ou plusieurs triggers INSTEAD OF....
    C'est du côté de ceux-ci qu'il faudrait creuser : voir s'ils peuvent être optimisés, s'ils n'effectuent pas des opérations gourmandes en ressources (envois de mails, enregistrement de fichiers...)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Dans la vue j'ai le trigger INSTEAD OF a l'INSERT :

    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
     
      CREATE OR REPLACE EDITIONABLE TRIGGER "TELCO"."IO_V_DUCT" INSTEAD OF INSERT ON V_DUCT REFERENCING NEW AS NEW OLD AS OLD
    BEGIN
      INSERT INTO TELCO.DUCT(ASSET_ID,DUCT_NAME,NATURE_ID_FK,DIAMETER_EXT,DUCT_IMAGE,PIPE_STATE_ID_FK,COLOR_ID_FK,OCCUPATION_RATE,DEVELOPER_ID_FK,OWNER_ID_FK,ADDITIVE_RATE,DUCT_COMMENT,OCCUPANT_ID_FK,STATUS_ID_FK,EXISTING_DATE,IMPLEMENTATION_DATE,LAST_MAINTENANCE_DATE,RECORD_CREATION_DATE,RECORD_CREATION_USER,RECORD_MODIFICATION_DATE,RECORD_MODIFICATION_USER,ADDITIVE_OCCUPATION,DIAMETER_INT,BORDER_COLOR_ID_FK,AVAILABILITY_ID_FK,BOND_TYPE_ID_FK,BOND_NUMBER,BOND_DISTANCE,ADMINISTRATOR_ID_FK,DEPTH,TO_CREATE_DATE,PROJECT_DATE,PROJECT_ID_FK,RECOL_DATE,CLEANING_DATE,ROUTING_DATE,OBJECT_STATE_ID_FK,CLIENT_NAME,LABEL_REFERENCE,STARTING_DATE,RETIREMENT_DATE,RETIREMENT_REASON,EXT_ID,REF_CODE1,REF_CODE2,REF_CODE3,REF_CODE4,EXT_ORI_ID,STATE_ID_FK,MATRICE_ROW_BEG,MATRICE_ROW_END,MATRICE_COL_BEG,MATRICE_COL_END,OWNER_TYPE_ID_FK)
      values (
        :NEW.ASSET_ID,
        :NEW.DUCT_NAME,
        :NEW.NATURE_ID_FK,
        :NEW.DIAMETER_EXT,
        :NEW.DUCT_IMAGE,
        :NEW.PIPE_STATE_ID_FK,
        :NEW.COLOR_ID_FK,
        :NEW.OCCUPATION_RATE,
        :NEW.DEVELOPER_ID_FK,
        :NEW.OWNER_ID_FK,
        :NEW.ADDITIVE_RATE,
        :NEW.DUCT_COMMENT,
        :NEW.OCCUPANT_ID_FK,
        :NEW.STATUS_ID_FK,
        :NEW.EXISTING_DATE,
        :NEW.IMPLEMENTATION_DATE,
        :NEW.LAST_MAINTENANCE_DATE,
        :NEW.RECORD_CREATION_DATE,
        :NEW.RECORD_CREATION_USER,
        :NEW.RECORD_MODIFICATION_DATE,
        :NEW.RECORD_MODIFICATION_USER,
        :NEW.ADDITIVE_OCCUPATION,
        :NEW.DIAMETER_INT,
        :NEW.BORDER_COLOR_ID_FK,
        :NEW.AVAILABILITY_ID_FK,
        :NEW.BOND_TYPE_ID_FK,
        :NEW.BOND_NUMBER,
        :NEW.BOND_DISTANCE,
        :NEW.ADMINISTRATOR_ID_FK,
        :NEW.DEPTH,
        :NEW.TO_CREATE_DATE,
        :NEW.PROJECT_DATE,
        :NEW.PROJECT_ID_FK,
        :NEW.RECOL_DATE,
        :NEW.CLEANING_DATE,
        :NEW.ROUTING_DATE,
        :NEW.OBJECT_STATE_ID_FK,
        :NEW.CLIENT_NAME,
        :NEW.LABEL_REFERENCE,
        :NEW.STARTING_DATE,
        :NEW.RETIREMENT_DATE,
        :NEW.RETIREMENT_REASON,
        :NEW.EXT_ID,
        :NEW.REF_CODE1,
        :NEW.REF_CODE2,
        :NEW.REF_CODE3,
        :NEW.REF_CODE4,
        :NEW.EXT_ORI_ID,
        :NEW.STATE_ID_FK,
        :NEW.MATRICE_ROW_BEG,
        :NEW.MATRICE_ROW_END,
        :NEW.MATRICE_COL_BEG,
        :NEW.MATRICE_COL_END,
        :NEW.OWNER_TYPE_ID_FK
      );
    END;
     
    /
    ALTER TRIGGER "TELCO"."IO_V_DUCT" ENABLE;
    Ainsi que dans la table j'ai 2 trigger de type "AFTER EACH ROW" & "BEFORE EACH ROW" en INSERT :

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    TRIGGER "TELCO"."AI_DUCT_ON_INF_LINK" AFTER
      INSERT ON TELCO.DUCT FOR EACH ROW
    DECLARE
      CURSOR C_EMP IS
      SELECT diameter_ext,
        nature_id_pk,
        nature_code
      FROM catalog_tube,
        param_pipe_nature
      WHERE catalog_tube.nature_id_fk=param_pipe_nature.nature_id_pk
      ORDER BY nature_code,
        diameter_ext;
    TYPE TUBE_DIAMETER_EXT
    IS
      TABLE OF NUMBER INDEX BY binary_integer;
    TYPE TUBE_NUMBER
    IS
      TABLE OF NUMBER INDEX BY binary_integer;
    TYPE TUBE_NATURE
    IS
      TABLE OF NUMBER INDEX BY binary_integer;
    TYPE TUBE_NATURE_CODE
    IS
      TABLE OF VARCHAR2(10) INDEX BY binary_integer;
      TubeDiamTab TUBE_DIAMETER_EXT;
      TubeNumberTab TUBE_NUMBER;
      TubeNatTab TUBE_NATURE;
      TubeNatCodeTab TUBE_NATURE_CODE;
      iIndex                  INTEGER;
      nbduct                  INTEGER;
      cwDiam                  INTEGER;
      cwNature                INTEGER;
      cpt                     INTEGER;
      linkId                  INTEGER;
      ductId                  INTEGER;
      nbPipeField             INTEGER;
      diamPipeField           INTEGER;
      diamNatField            INTEGER;
      bJobDone                INTEGER;
      pipeDesc                VARCHAR(100);
      cwDesc                  VARCHAR(100);
      tmpCar                  VARCHAR(1);
      nbPipe                  VARCHAR(10);
      diamPipe                VARCHAR(10);
      naturePipe              VARCHAR(10);
      InvalidDiameterOrNature EXCEPTION;
      InvalidDuctDesc         EXCEPTION;
    BEGIN
      PrintToLog('-> AI_DUCT_ON_INF_LINK');
      IF :NEW.RECORD_CREATION_USER NOT LIKE 'ImportGrace-%' THEN
        pipeDesc      := '';
        cpt           := 1;
        nbPipeField   := 1;
        diamPipeField := 0;
        nbPipe        := '';
        diamPipe      := '';
        naturePipe    := '';
        iIndex        := 1;
        -- On initialise les tableaux par diamètre et nature et on met le nombre de fourreaux à 0
        FOR Cur IN C_EMP
        LOOP
          TubeDiamTab(iIndex)    := Cur.diameter_ext;
          TubeNatCodeTab(iIndex) := Cur.nature_code;
          TubeNatTab(iIndex)     := Cur.nature_id_pk;
          TubeNumberTab(iIndex)  := 0;
          iIndex                 := iIndex + 1;
        END LOOP;
        ductId := :new.ASSET_ID;
        SELECT LINK_CONFIG_ID INTO linkId FROM DUCT_CONFIG WHERE DUCT_ASSET_ID=ductId;
        SELECT PIPE_NUMBER,
          PIPE_DESC
        INTO nbduct,
          cwDesc
        FROM INF_LINK
        WHERE ASSET_ID=linkId;
        cwDiam       := :new.DIAMETER_EXT;
        cwNature     := :new.NATURE_ID_FK;
        -- On augmente le nombre de fourreaux du diamètre et de la nature courants
        iIndex              := 1;
        bJobDone            := 0;
        IF TubeDiamTab.COUNT > 0 THEN
          LOOP
            IF TubeDiamTab(iIndex)   = cwDiam AND TubeNatTab(iIndex) = cwNature THEN
              TubeNumberTab(iIndex) := 1;
              bJobDone              := 1;
            END IF;
            iIndex := iIndex + 1;
            EXIT
          WHEN bJobDone = 1 OR iIndex > TubeDiamTab.COUNT;
          END LOOP;
        END IF;
        IF (bJobDone = 0) THEN
          Raise InvalidDiameterOrNature; -- nature et diamètre non trouvé, bizarre...
        END IF;
        -- On parcourt le descripteur courant pour lire les fourreaux et les compter
        WHILE cpt <= LENGTH(cwDesc)
        LOOP
          tmpCar          := SUBSTR(cwDesc,cpt,1);
          IF (tmpCar       = 'x') THEN
            nbPipeField   := 0;
            diamNatField  := 1;
            diamPipeField := 0;
          elsif (tmpCar    = '/') OR (cpt = LENGTH(cwDesc)) THEN
            IF (cpt        = LENGTH(cwDesc)) THEN
              diamPipe    := diamPipe || tmpCar;
            END IF;
            bJobDone := 0;
            iIndex   := 1;
            LOOP
              IF TubeDiamTab(iIndex)   = TO_NUMBER(diamPipe) AND TubeNatCodeTab(iIndex) = naturePipe THEN
                TubeNumberTab(iIndex) := TubeNumberTab(iIndex) + TO_NUMBER(nbPipe);
                bJobDone              := 1;
              END IF;
              iIndex := iIndex + 1;
              EXIT
            WHEN bJobDone = 1 OR iIndex > TubeDiamTab.COUNT;
            END LOOP;
            IF (bJobDone = 0) THEN
              Raise InvalidDuctDesc;
            END IF;
            nbPipeField     := 1;
            diamNatField    := 0;
            diamPipeField   := 0;
            nbPipe          := '';
            diamPipe        := '';
            naturePipe      := '';
          elsif nbPipeField  = 1 THEN
            nbPipe          := nbPipe || tmpCar;
          elsif diamNatField = 1 AND IsNumeric(tmpCar) = 0 THEN
            naturePipe      := naturePipe || tmpCar;
          ELSE
            diamPipe      := diamPipe || tmpCar;
            diamNatField  := 0;
            diamPipeField := 1;
          END IF;
          cpt := cpt + 1;
        END LOOP;
        pipeDesc := '';
        iIndex   := 1;
        nbDuct   := 0;
        -- On construit le nouveau descripteur
        LOOP
          IF TubeNumberTab(iIndex) > 0 THEN
            IF nbDuct              > 0 THEN
              pipeDesc            := pipeDesc || '/';
            END IF;
            pipeDesc := pipeDesc || TO_CHAR(TubeNumberTab(iIndex)) || 'x' || TubeNatCodeTab(iIndex) || TO_CHAR(TubeDiamTab(iIndex));
            nbDuct   := nbDuct + TubeNumberTab(iIndex);
          END IF;
          iIndex := iIndex + 1;
          EXIT
        WHEN iIndex > TubeDiamTab.COUNT;
        END LOOP;
     
        UPDATE INF_LINK
        SET PIPE_NUMBER=nbduct,
          PIPE_DESC    =pipeDesc
        WHERE ASSET_ID =linkId;
        TubeDiamTab.DELETE;
        TubeNatCodeTab.DELETE;
        TubeNatTab .DELETE;
        TubeNumberTab.DELETE;
      END IF; --- fin du IF pas import GRACE
      PrintToLog('<- AI_DUCT_ON_INF_LINK');
    EXCEPTION
    WHEN InvalidDiameterOrNature THEN
      Raise_application_error(-20000, 'Nature ou diamètre invalide.');
    WHEN InvalidDuctDesc THEN
      Raise_application_error(-20001, 'Descripteur invalide.');
    WHEN OTHERS THEN
      PrintToLog(sqlerrm);
      TubeDiamTab.DELETE;
      TubeNatCodeTab.DELETE;
      TubeNatTab .DELETE;
      TubeNumberTab.DELETE;
    END;
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    TRIGGER "TELCO"."BI_DUCT_DEFAULT" BEFORE
      INSERT ON TELCO.DUCT FOR EACH ROW DECLARE CreationUser INF_LINK.RECORD_CREATION_USER%TYPE;
      OwnerId INF_LINK.OWNER_ID_FK%TYPE;
      BEGIN
        PrintToLog('-> BI_DUCT_DEFAULT');
        -- Gestion du cas de l'import Grace
        IF :NEW.RECORD_CREATION_USER NOT LIKE 'ImportGrace-%' THEN
          IF :new.OWNER_ID_FK IS NULL OR :new.RECORD_CREATION_USER IS NULL THEN
            BEGIN
              SELECT IL.OWNER_ID_FK,
                IL.RECORD_CREATION_USER
              INTO OwnerId,
                CreationUser
              FROM DUCT_CONFIG DC,
                INF_LINK IL
              WHERE DC.DUCT_ASSET_ID=:NEW.ASSET_ID
              AND IL.ASSET_ID       = DC.LINK_CONFIG_ID;
              IF :new.OWNER_ID_FK  IS NULL THEN
                :new.OWNER_ID_FK   := OwnerId;
              END IF;
              IF :new.RECORD_CREATION_USER IS NULL THEN
                :new.RECORD_CREATION_USER  := CreationUser;
              END IF;
            EXCEPTION
            WHEN OTHERS THEN
              NULL;
            END;
          END IF;
          -- Correctif pour import PIT
          IF :new.RECORD_CREATION_USER = 'DrawNet2DB' THEN
            BEGIN
              IF :new.DIAMETER_EXT IN (18,25,40,50) THEN -- PEHD
                SELECT NAME,
                  NATURE_ID_FK,
                  DIAMETER_INT,
                  COLOR_ID_FK,
                  BORDER_COLOR_ID_FK,
                  IMAGE_PATH
                INTO :new.DUCT_NAME,
                  :new.NATURE_ID_FK,
                  :new.DIAMETER_INT,
                  :new.COLOR_ID_FK,
                  :new.BORDER_COLOR_ID_FK,
                  :new.DUCT_IMAGE
                FROM CATALOG_TUBE ct,
                  PARAM_PIPE_NATURE pm
                WHERE pm.NATURE_CODE='PEHD'
                AND pm.NATURE_ID_PK = ct.NATURE_ID_FK
                AND ct.DIAMETER_EXT = :new.DIAMETER_EXT
                AND rownum = 1;
              elsif :new.DIAMETER_EXT IN (28,33,45,60,80) THEN -- PVC
                SELECT NAME,
                  NATURE_ID_FK,
                  DIAMETER_INT,
                  COLOR_ID_FK,
                  BORDER_COLOR_ID_FK,
                  IMAGE_PATH
                INTO :new.DUCT_NAME,
                  :new.NATURE_ID_FK,
                  :new.DIAMETER_INT,
                  :new.COLOR_ID_FK,
                  :new.BORDER_COLOR_ID_FK,
                  :new.DUCT_IMAGE
                FROM CATALOG_TUBE ct,
                  PARAM_PIPE_NATURE pm
                WHERE pm.NATURE_CODE='PVC'
                AND pm.NATURE_ID_PK = ct.NATURE_ID_FK
                AND ct.DIAMETER_EXT = :new.DIAMETER_EXT
                AND rownum = 1;
              elsif :new.DIAMETER_EXT IN (100,120,150,200) THEN -- Ciment
                SELECT NAME,
                  NATURE_ID_FK,
                  DIAMETER_INT,
                  COLOR_ID_FK,
                  BORDER_COLOR_ID_FK,
                  IMAGE_PATH
                INTO :new.DUCT_NAME,
                  :new.NATURE_ID_FK,
                  :new.DIAMETER_INT,
                  :new.COLOR_ID_FK,
                  :new.BORDER_COLOR_ID_FK,
                  :new.DUCT_IMAGE
                FROM CATALOG_TUBE ct,
                  PARAM_PIPE_NATURE pm
                WHERE pm.NATURE_CODE='CUC'
                AND pm.NATURE_ID_PK = ct.NATURE_ID_FK
                AND ct.DIAMETER_EXT = :new.DIAMETER_EXT
                AND rownum = 1;
              END IF;
            EXCEPTION WHEN OTHERS THEN NULL;
            END;
          END IF; --- fin du IF import PIT
        END IF; --- fin du IF pas import GRACE
        -- Gestion de la date et utilisateur de création si non crée par le logiciel
        IF :NEW.RECORD_CREATION_DATE IS NULL THEN
          :NEW.RECORD_CREATION_DATE  := SYSDATE ;
        END IF;
        IF :NEW.RECORD_CREATION_USER IS NULL THEN
          :NEW.RECORD_CREATION_USER  := 'system' ;
        END IF;
        -- Gestion des clés étrangères avec des valeurs nulles
        IF :new.OWNER_ID_FK IS NULL THEN
          :new.OWNER_ID_FK  := 0;
        END IF;
        IF :new.OCCUPANT_ID_FK IS NULL THEN
          :new.OCCUPANT_ID_FK  := 0;
        END IF;
        IF :new.DEVELOPER_ID_FK IS NULL THEN
          :new.DEVELOPER_ID_FK  := 0;
        END IF;
        IF :new.ADMINISTRATOR_ID_FK IS NULL THEN
          :new.ADMINISTRATOR_ID_FK  := 0;
        END IF;
        IF :new.PIPE_STATE_ID_FK IS NULL THEN
          :new.PIPE_STATE_ID_FK  := 0;
        END IF;
        IF :new.STATUS_ID_FK IS NULL THEN
          :new.STATUS_ID_FK  := 0;
          :new.EXISTING_DATE := SYSDATE;
        END IF;
        IF :new.STATE_ID_FK  IS NULL THEN
          :new.STATE_ID_FK   := 0; -- indéfini
          :new.EXISTING_DATE := SYSDATE;
        END IF;
        IF :new.BOND_TYPE_ID_FK IS NULL THEN
          :new.BOND_TYPE_ID_FK  := 0; -- non renseigné
        END IF;
        IF :new.OCCUPATION_RATE IS NULL THEN
          :new.OCCUPATION_RATE  := 0;
        END IF;
        IF :new.NATURE_ID_FK IS NULL THEN
          :new.NATURE_ID_FK  := 0;
        END IF;
        IF :new.AVAILABILITY_ID_FK IS NULL THEN
          :new.AVAILABILITY_ID_FK  := 0;
        END IF;
        IF :new.PROJECT_ID_FK IS NULL THEN
          :new.PROJECT_ID_FK  := 0;
        END IF;
        IF :new.OWNER_TYPE_ID_FK IS NULL THEN
          :new.OWNER_TYPE_ID_FK  := 0;
        END IF;      
        IF :new.OBJECT_STATE_ID_FK IS NULL THEN
          :new.OBJECT_STATE_ID_FK  := 0;
        END IF;
        PrintToLog('<- BI_DUCT_DEFAULT');
      END;

    J'ai essayer de désactiver les triggers de ma table, sans succès toujours pas loin de 1 seconde par INSERT.

  9. #9
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    La taille des données insérées est ridicule, donc le pb n'est pas là.
    Index désactivés : OK
    Triggers désactivés : OK
    Quid des contraintes d'intégrités? Peux-tu les désactiver? Mais je doute que cela arrange la vitesse d'exécution.

    Il faudrait SURTOUT avoir l'ordre SQL de construction de la vue : si ça se trouve il y a un ou des dblinks... et donc des pbs de réseau, débit etc etc.
    Et attention, avoir l'ordre SQL du plus bas niveau! Dans DBA_VIEWS on a le niveau N-1 mais une vue peut se baser sur des vues basées elles même sur d'autres vues.

    Pour cela il faut utiliser dbms_utility.expand_sql_text.
    Un exemple détaillé ici : http://dbaoraclesql.canalblog.com/ar.../36417011.html

    Sinon, en simplifié, que renvoie le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set serveroutput on
    declare
                v_in_view  clob := 'SELECT * FROM telco.v_duct';
                v_out_view clob;
    begin
                dbms_utility.expand_sql_text(v_in_view, v_out_view);
                dbms_output.put_line(v_out_view);
    end;
    /
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  10. #10
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Bonjour, Merci pour ta réponse Ikebukuro,

    Je ne suis pas un spécialiste en Oracle ... Le code que tu m'a envoyer me génère une erreur :

    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
    Erreur commençant à la ligne: 2 de la commande -
    declare
                v_in_view  clob := 'SELECT * FROM telco.v_duct';
                v_out_view clob;
    begin
                dbms_utility.expand_sql_text(v_in_view, v_out_view);
                dbms_output.put_line(v_out_view);
    end;
    Rapport d'erreur -
    ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur
    ORA-06512: à ligne 6
    06502. 00000 -  "PL/SQL: numeric or value error%s"
    *Cause:    An arithmetic, numeric, string, conversion, or constraint error
               occurred. For example, this error occurs if an attempt is made to
               assign the value NULL to a variable declared NOT NULL, or if an
               attempt is made to assign an integer larger than 99 to a variable
               declared NUMBER(2).
    *Action:   Change the data, how it is manipulated, or how it is declared so
               that values do not violate constraints.
    Ecoulé : 00:00:00.184

    ps: Ma table est vide, faut-il des valeurs ?

    J'ai 7 contraintes que j'ai désactivé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    1 ligne inséré.
     
    Ecoulé : 00:00:01.332
    Merci,

  11. #11
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Argh...

    Essaye alors ceci sinon je ne vois pas où est ton erreur : tu as bien lancé le code sous SQL*Plus, avec un user ayant suffisamment de droits (genre le rôle DBA)?
    Est-ce que les disques durs posent problème? Ce serait une piste à explorer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set serveroutput on
    declare
                v_in_view  clob := 'SELECT * FROM cat';
                v_out_view clob;
    begin
                dbms_utility.expand_sql_text(v_in_view, v_out_view);
                dbms_output.put_line(v_out_view);
    end;
    /
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  12. #12
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Alors oui je le fais bien dans SQLplus je suis connecter dans le USER ayant les droits.

    Voici le retour de de votre requête sur la table et non la vue..Sur la vue ça ne fonctionne pas.

    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
    SELECT "A1"."ASSET_ID" "ASSET_ID","A1"."DUCT_NAME"
    "DUCT_NAME","A1"."NATURE_ID_FK" "NATURE_ID_FK","A1"."DIAMETER_EXT"
    "DIAMETER_EXT","A1"."DUCT_IMAGE" "DUCT_IMAGE","A1"."PIPE_STATE_ID_FK"
    "PIPE_STATE_ID_FK","A1"."COLOR_ID_FK" "COLOR_ID_FK","A1"."OCCUPATION_RATE"
    "OCCUPATION_RATE","A1"."DEVELOPER_ID_FK" "DEVELOPER_ID_FK","A1"."OWNER_ID_FK"
    "OWNER_ID_FK","A1"."ADDITIVE_RATE" "ADDITIVE_RATE","A1"."DUCT_COMMENT"
    "DUCT_COMMENT","A1"."OCCUPANT_ID_FK" "OCCUPANT_ID_FK","A1"."STATUS_ID_FK"
    "STATUS_ID_FK","A1"."EXISTING_DATE" "EXISTING_DATE","A1"."IMPLEMENTATION_DATE"
    "IMPLEMENTATION_DATE","A1"."LAST_MAINTENANCE_DATE"
    "LAST_MAINTENANCE_DATE","A1"."RECORD_CREATION_DATE"
    "RECORD_CREATION_DATE","A1"."RECORD_CREATION_USER"
    "RECORD_CREATION_USER","A1"."RECORD_MODIFICATION_DATE"
    "RECORD_MODIFICATION_DATE","A1"."RECORD_MODIFICATION_USER"
    "RECORD_MODIFICATION_USER","A1"."ADDITIVE_OCCUPATION"
    "ADDITIVE_OCCUPATION","A1"."DIAMETER_INT"
    "DIAMETER_INT","A1"."BORDER_COLOR_ID_FK"
    "BORDER_COLOR_ID_FK","A1"."AVAILABILITY_ID_FK"
    "AVAILABILITY_ID_FK","A1"."BOND_TYPE_ID_FK" "BOND_TYPE_ID_FK","A1"."BOND_NUMBER"
    "BOND_NUMBER","A1"."BOND_DISTANCE" "BOND_DISTANCE","A1"."ADMINISTRATOR_ID_FK"
    "ADMINISTRATOR_ID_FK","A1"."DEPTH" "DEPTH","A1"."TO_CREATE_DATE"
    "TO_CREATE_DATE","A1"."PROJECT_DATE" "PROJECT_DATE","A1"."PROJECT_ID_FK"
    "PROJECT_ID_FK","A1"."RECOL_DATE" "RECOL_DATE","A1"."CLEANING_DATE"
    "CLEANING_DATE","A1"."ROUTING_DATE" "ROUTING_DATE","A1"."OBJECT_STATE_ID_FK"
    "OBJECT_STATE_ID_FK","A1"."CLIENT_NAME" "CLIENT_NAME","A1"."LABEL_REFERENCE"
    "LABEL_REFERENCE","A1"."STARTING_DATE" "STARTING_DATE","A1"."RETIREMENT_DATE"
    "RETIREMENT_DATE","A1"."RETIREMENT_REASON" "RETIREMENT_REASON","A1"."EXT_ID"
    "EXT_ID","A1"."REF_CODE1" "REF_CODE1","A1"."REF_CODE2"
    "REF_CODE2","A1"."REF_CODE3" "REF_CODE3","A1"."REF_CODE4"
    "REF_CODE4","A1"."EXT_ORI_ID" "EXT_ORI_ID","A1"."STATE_ID_FK"
    "STATE_ID_FK","A1"."MATRICE_ROW_BEG" "MATRICE_ROW_BEG","A1"."MATRICE_ROW_END"
    "MATRICE_ROW_END","A1"."MATRICE_COL_BEG"
    "MATRICE_COL_BEG","A1"."MATRICE_COL_END"
    "MATRICE_COL_END","A1"."OWNER_TYPE_ID_FK" "OWNER_TYPE_ID_FK" FROM "TELCO"."DUCT"
    "A1"

  13. #13
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    OK, je voulais juste être sur qu'il n'y avait pas de dblink sous cette vue et c'est bien le cas.

    Désolé, à part un pb de disque dur trop lent...

    Est-ce que tu peux lancer sous le serveur Linux/Unix la commande et coller ici le résultat? Il te faudra attendre 25 secondes.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  14. #14
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Je suis sous Windows je n'ai pas de serveur Linux. (Disque dur trop lent j'aurais le problème sur toutes mes tables... ) Alors que d'autres table je prends même pas 1*ms....

  15. #15
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Est-ce que ton INSERT a déjà été suffisamment rapide ou bien il a toujours été lent?
    Si oui, quel jour, quelle heure?

    Un autre test sera intéressant : faire un INSERT directement dans ta table pour voir si le temps est le même. Si oui, autre test, faire un INSERT avec uniquement les colonnes NOT NULL renseignées avec la valeur la plus petite : pour voir si le pb perdure.

    Autre test : voir ce que donne la commande AUTOTRACE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set autotrace on
    INSERT ...
    set autotrace off
    Si on voit pas : il faudra faire une trace 10046... mais ce sera pour plus tard.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  16. #16
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Ah, au fait, on parle de contraintes d'intégrité, il n'y aurait pas, par le plus grand des hasards, des Foreign Keys depuis ta table vers des tables de référence?
    En clair, quand tu insères des valeurs non NULL dans ta table, est-ce que certaines de ces valeurs doivent déjà exister dans d'autres tables? Si oui, il y a bien une ou des Foreign Key : est-ce qu'elles sont indexées? Si c'est non, Oracle doit faire un Full Table Scan avant de faire l'INSERT...
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  17. #17
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Bonjour merci pour vos réponse,



    Citation Envoyé par Ikebukuro Voir le message
    Est-ce que ton INSERT a déjà été suffisamment rapide ou bien il a toujours été lent?
    Pour le moment il a toujours été lent
    Si oui, quel jour, quelle heure?

    Un autre test sera intéressant :
    faire un INSERT directement dans ta table pour voir si le temps est le même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         INSERT INTO telco.duct (
            label_reference
        ) VALUES (
            NULL
        )
    Je viens d'essayer d'INSERT directement dans la table avec 1 seul valeur : Ecoulé : 00:00:00.007

    Le même test dans la vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         INSERT INTO telco.v_duct (
            label_reference
        ) VALUES (
            NULL
        )
    vue : Ecoulé : 00:00:00.507



    Si oui, autre test, faire un INSERT avec uniquement les colonnes NOT NULL renseignées avec la valeur la plus petite : pour voir si le pb perdure.

    Autre test : voir ce que donne la commande AUTOTRACE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set autotrace on
    INSERT ...
    set autotrace off
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    1 ligne inséré.
     
    Explain Plan
    -----------------------------------------------------------
     
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    ---------------------------------------------------------------------------
    | Id  | Operation                | Name   | Rows  | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------
    |   0 | INSERT STATEMENT         |        |     1 |     1   (0)| 00:00:01 |
    |   1 |  LOAD TABLE CONVENTIONAL | V_DUCT |       |            |          |
    ---------------------------------------------------------------------------
    Si on voit pas : il faudra faire une trace 10046... mais ce sera pour plus tard.

  18. #18
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    Ah, au fait, on parle de contraintes d'intégrité, il n'y aurait pas, par le plus grand des hasards, des Foreign Keys depuis ta table vers des tables de référence?
    En clair, quand tu insères des valeurs non NULL dans ta table, est-ce que certaines de ces valeurs doivent déjà exister dans d'autres tables? Si oui, il y a bien une ou des Foreign Key : est-ce qu'elles sont indexées? Si c'est non, Oracle doit faire un Full Table Scan avant de faire l'INSERT...

    Il y a bien sûr des Foreign Keys depuis ta table vers des tables de référence. Mais ils sont tous indexé.


    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
    TELCO	PK_DUCT	UNIQUE	VALID	NORMAL	N	NO		NO	ASSET_ID
    TELCO	DUCT_COLOR_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	COLOR_ID_FK
    TELCO	DUCT_OWNER_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	OWNER_ID_FK
    TELCO	DUCT_STATE_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	STATE_ID_FK
    TELCO	DUCT_NATURE_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	NATURE_ID_FK
    TELCO	DUCT_STATUS_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	STATUS_ID_FK
    TELCO	DUCT_PROJECT_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	PROJECT_ID_FK
    TELCO	DUCT_OCCUPANT_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	OCCUPANT_ID_FK
    TELCO	DUCT_BOND_TYPE_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	BOND_TYPE_ID_FK
    TELCO	DUCT_DEVELOPER_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	DEVELOPER_ID_FK
    TELCO	DUCT_OWNER_TYPE_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	OWNER_TYPE_ID_FK
    TELCO	DUCT_PIPE_STATE_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	PIPE_STATE_ID_FK
    TELCO	DUCT_AVAILABILITY_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	AVAILABILITY_ID_FK
    TELCO	DUCT_BORDER_COLOR_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	BORDER_COLOR_ID_FK
    TELCO	DUCT_OBJECT_STATE_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	OBJECT_STATE_ID_FK
    TELCO	DUCT_ADMINISTRATOR_IDX	NONUNIQUE	VALID	NORMAL	N	NO		NO	ADMINISTRATOR_ID_FK

  19. #19
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Tiens, visiblement on avait oublié de discuter de cette ligne dans ton INSERT : 'BIBEQUIPMENT:\Mask_pipe\PVC300.gif'
    Dans la colonne où tu mets cette valeur, c'est juste un chemin d'une image (donc une suite de caractères) ou c'est carrément l'image que tu stockes? Si oui, elle fait quelle taille?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  20. #20
    Membre à l'essai
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Salut, je stock seulement le chemin vers l'image je ne stock pas l'image.

Discussions similaires

  1. [DB2] Temps de calcul via une vue trop long
    Par nathou38400 dans le forum DB2
    Réponses: 2
    Dernier message: 09/05/2011, 11h18
  2. Insertion dans une vue
    Par wissem.ba dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2011, 15h35
  3. Insert dans une vue avec une valeur par défaut
    Par adiGuba dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/07/2010, 15h12
  4. Réponses: 0
    Dernier message: 20/02/2008, 11h55
  5. insertion dans une BD trop lente
    Par jouidos dans le forum Windows Forms
    Réponses: 13
    Dernier message: 01/02/2007, 12h32

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