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 :

Insertion des données avec une procédure stockée et pb de ID clé primaire


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 106
    Par défaut Insertion des données avec une procédure stockée et pb de ID clé primaire
    Bonjour,
    J'ai une table temporaire qui stocke les données temporairament puis ils vont etre truncate :
    CREATE TABLE KPI.HTTP_ODS
    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
     
    (
      HOST            VARCHAR2(500 BYTE),
      DATE_HTTP       DATE,
      NBYTEDN         NUMBER,
      NBSESSTCP       NUMBER,
      AVG_SYN_SYNACK  NUMBER,
      AVG_SYNACK_ACK  NUMBER,
      DELAYREQANS     NUMBER,
      NBGET           NUMBER,
      NBPOST          NUMBER,
      OTHERREQ        NUMBER,
      NB1XX           NUMBER,
      NB2XX           NUMBER,
      NB3XX           NUMBER,
      NB4XX           NUMBER,
      NB5XX           NUMBER,
      NBOTHERANS      NUMBER
    )
    puis ma table que je vais l'utliser:

    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
     
    CREATE TABLE KPI.HTTP_DWHS
    (
      ID              INTEGER                       PRIMARY KEY,
      HOST            VARCHAR2(500 BYTE),
      DATE_HTTP       DATE,
      NBYTEDN         NUMBER,
      NBSESSTCP       NUMBER,
      AVG_SYN_SYNACK  NUMBER,
      AVG_SYNACK_ACK  NUMBER,
      RTT_HTTP        NUMBER,
      DELAYREQANS     NUMBER,
      NBGET           NUMBER,
      NBPOST          NUMBER,
      OTHERREQ        NUMBER,
      NB1XX           NUMBER,
      NB2XX           NUMBER,
      NB3XX           NUMBER,
      NB4XX           NUMBER,
      NB5XX           NUMBER,
      NBOTHERANS      NUMBER
    )
    pour insérer les données de la table temporaire vers la table objecitf j'ai crée une procédure stockée en utilisant un curseur
    et du coup j'ai un erreur car la table ods ne contient pas la clé primaire je sais pas comment corriger cet erreur
    j'ai crée une séquence , j'essaye avec un trigger mais ça marche pas j'essaye avec seq.nextval j'ai le mem erreur
    ceci le code de ma 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
     
    CREATE OR REPLACE procedure KPI.http_modif is 
     
    CURSOR c_http is 
    select 
       HOST                        
      ,DATE_HTTP                
      ,NBYTEDN                  
      ,NBSESSTCP                
      ,kpi.unite_s(AVG_SYN_SYNACK)    
      ,kpi.unite_s(AVG_SYNACK_ACK)    
      ,kpi.sum_s(AVG_SYN_SYNACK, AVG_SYNACK_ACK) 
      ,kpi.unite_s(DELAYREQANS)    
      ,NBGET          
      ,NBPOST          
      ,OTHERREQ        
      ,NB1XX           
      ,NB2XX           
      ,NB3XX           
      ,NB4XX           
      ,NB5XX           
      ,NBOTHERANS      
    from kpi.http_ods;
     
    TYPE array_http is table of c_http%rowtype;
    http_data array_http;
     
    begin
     
     open c_http;
     
         loop 
              fetch c_http
              bulk collect into http_data
              limit 1000;
     
              begin 
                 forall i in 1..http_data.count
                 insert into KPI.HTTP_DWHS(HOST,DATE_HTTP,NBYTEDN,NBSESSTCP,AVG_SYN_SYNACK,AVG_SYNACK_ACK,RTT_HTTP
                                           ,DELAYREQANS,NBGET,NBPOST,OTHERREQ,NB1XX,NB2XX,NB3XX,NB4XX,NB5XX,NBOTHERANS) 
                 values http_data(i);
              end;
     
             exit when c_http%notfound;
         end loop;
     close c_http;
     
    end;
    /
    que je dois mettre pour ne pas avoir cet erreur et de générer le clé primaire automatiquement,

    merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Pour alimenter la PK, il faut une séquence qui sera appelée dans le select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select seq.nextval as id ...
    Après inutile de passer par une collection, faites juste un insert into select

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 106
    Par défaut
    merci pour ta réponse,

    je sais que je dois passer par seq.next
    mais le pb que mes données seront insérées dans la table temporaire avec un bulk insert à travers d'un job talend
    et data est volumineuse presque le fichier qui sera charger dans la table ods est environ 1GB

    donc l'idée pour charger dans la table dwhs est de crée cette procédure avec la collection ?
    comment faire pour la clé primaire ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Ben avec la collection il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    .........
    CURSOR c_http IS 
    SELECT
       seq.nextval as id 
       HOST                        
      ,DATE_HTTP 
      ...
    ......  
      INSERT INTO KPI.HTTP_DWHS(id,HOST,DATE_HTTP,.....
    .......
    Non ?

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 106
    Par défaut
    Merci skuatamad
    comment il peut select une colonne qui n'existe pas dans la table ODS !!

    j'essaye d'éxécutre ce que tu me propose mais il me génére erreur nbre de valeurs insuffisants
    car le pauvre seq.nextval n'est pas sa propre colonne

    aidez moi svp
    merci d'avance

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Pouvez-vous poster le code modifié avec sequence ?
    La séquence n'est pas liée à une table.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/09/2009, 13h46
  2. Réponses: 2
    Dernier message: 28/05/2006, 23h31
  3. [format des données avec une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/03/2005, 13h24
  4. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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