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 :

Remplissage des tables en utilisant du PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Remplissage des tables en utilisant du PL/SQL
    Bonjour,
    le but est d’insérer des valeurs dans les tables en utilisant des boucles avec pl/sql
    je viens d’exécuter ce code

    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
    declare
    date_sousc date;
    montant number;
    code number;
    code_ass number;
    code_comp number;
    mat number;
    begin
    for code in 1..800000 loop
    select floor(dbms_random.value(1,200000))into code_ass from dual;
    select floor(dbms_random.value(1,20.2))into code_comp from dual;
    select floor(dbms_random.value(1,40000.2))into mat from dual;
    select trunc(dbms_random.value(5000,100000),2)into montant from dual;
    select to_date(trunc(dbms_random.value(to_char(date '2014-01-01','J'),to_char(date '2016-12-31','J')))
    	,'J')into date_sousc from dual;
    insert into contrat values(code,date_sousc,montant,code_ass,code_comp,mat);
    	end loop;
    commit;
    end;
    /
    puis j'ai cette erreur
    declare
    *
    ERREUR Ó la ligne 1 :
    ORA-01438: valeur incohÚrente avec la prÚcision indiquÚe pour cette colonne
    ORA-06512: Ó ligne 18
    que je ne comprends pas pourquoi.

    Merci pour toute contribution.

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    Bonjour,

    Faites un DESC contrat et vérifiez que chaque colonne a bien une taille suffisante pour stocker les valeurs que vous envoyez.

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Votre insert est non-nommé vérifiez donc que les colonnes de la table de destination sont dans la bon ordre.
    autre remarque : pas besoin de PL/SQL pour ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    insert into contrat --(vérifiez/précisez l'ordre des colonnes)
    select floor(dbms_random.value(1,200000)) as code_ass,
           floor(dbms_random.value(1,20.2)) as code_comp,
           floor(dbms_random.value(1,40000.2)) as mat,
           trunc(dbms_random.value(5000,100000),2) as montant,
           to_date(trunc(dbms_random.value(to_char(date '2014-01-01','J'),to_char(date '2016-12-31','J')))  ,'J') as date_sousc 
      from dual
     connect by level <= 800000

  4. #4
    Membre à l'essai
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Merci, j'ai resolu le probleme.

  5. #5
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Votre insert est non-nommé vérifiez donc que les colonnes de la table de destination sont dans la bon ordre.
    autre remarque : pas besoin de PL/SQL pour ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    insert into contrat --(vérifiez/précisez l'ordre des colonnes)
    select floor(dbms_random.value(1,200000)) as code_ass,
           floor(dbms_random.value(1,20.2)) as code_comp,
           floor(dbms_random.value(1,40000.2)) as mat,
           trunc(dbms_random.value(5000,100000),2) as montant,
           to_date(trunc(dbms_random.value(to_char(date '2014-01-01','J'),to_char(date '2016-12-31','J')))  ,'J') as date_sousc 
      from dual
     connect by level <= 800000 
    Bonjour Mnitu, c'est le connect by level qui génère les 800000 lignes donc ?
    Première fois que je vois ça ... alors pour ne pas mourir idiot et sans Oracle sous la main
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
     
    SQL> create table t_con(a int);
    Table created
     
    SQL> insert into t_con
      2  select level
      3  from dual
      4  connect by level <= 800000
      5  /
    800000 rows inserted
     
    SQL>

  7. #7
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
     
    SQL> create table t_con(a int);
    Table created
     
    SQL> insert into t_con
      2  select level
      3  from dual
      4  connect by level <= 800000
      5  /
    800000 rows inserted
     
    SQL>
    Parfait. Merci pour cette démo !
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/01/2014, 14h05
  2. Réponses: 0
    Dernier message: 14/12/2008, 11h49
  3. Réponses: 11
    Dernier message: 23/09/2008, 13h16
  4. Comment suivre le remplissage des tables partitionnées
    Par marvelromy dans le forum Oracle
    Réponses: 3
    Dernier message: 19/11/2007, 19h16
  5. Equivalent des table Enum de mysql sous Sql server
    Par scaleo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/04/2006, 12h17

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