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 :

CREATE TABLE et INSERT dans la même procédure


Sujet :

PL/SQL Oracle

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Par défaut CREATE TABLE et INSERT dans la même procédure
    Bonjour,

    je suis débutant en PL/SQL et j'essaye de créer une procedure qui va créer un table et insérer des données dedans.

    Seulement je n'arrive pas à compiler la procedure parce que le compilateur me retourne l'erreur ora-00942 comme quoi la table est inexisante. mais c'est normal étant donné que je créer la table juste avant dans ma procédure.

    Alors comment est-ce que je dois faire pour que le compilateur passe outre cette erreur ?

    Merci

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Peux-tu nous mettre ta requête stp ?

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    La procédure ne compilera jamais si la table n'existe pas.
    Soit tu la crées avant, soit tu la crées dans la procédure, et alors l'insertion doit être codée en dynamique..
    Créer une table dans une procédure : cette solution n'est vraiment pas top.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Par défaut
    Oui la voilà, c'est une procédure pour créer des valeurs aléatoires.

    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
     
    CREATE OR REPLACE PROCEDURE SP_TEST100 
    IS 
    BEGIN
          EXECUTE IMMEDIATE 'CREATE TABLE tb_test100
          (
            char_100	CHAR,
            Varchar2_100	VARCHAR2(100),
            long_100	LONG,
            Number_100	NUMBER,
            Number2_100	NUMBER(10,2),
            Date_100	DATE
          )';
     
          for i in 1 .. 100 loop
          INSERT INTO tb_test100
            SELECT DBMS_RANDOM.STRING('U',1),
            DBMS_RANDOM.STRING('l',35),
            DBMS_RANDOM.STRING('l',80),
            ROUND(DBMS_RANDOM.VALUE(1,100000000)),
            DBMS_RANDOM.VALUE(1,10000000),
            to_date(trunc(dbms_random.value(2422599,2457085)),'j')
            FROM dual;
        end loop;
    END SP_TEST100;
    Voilà

  5. #5
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Comme l'a dit McM créer la table dans ta requête n'est pas top.

    Est-ce une procédure qu'il va falloir exécuter plusieurs fois ?
    Car imagine ta procédure est fonctionnelle et marche, que va-t'il se passer à la deuxième exécution ? Tu vas lui demander de créer une table déjà existante et donc ta procédure risque de stopper.

    Pour savoir si c'est ton INSERT qui plante peux-tu le remplacer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DBMS_OUTPUT.PUT_LINE(i);
    Après pour le EXECUTE IMMEDIATE je connais pas trop..

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 29
    Par défaut
    Je vais suivre l'idée de McM, j'ai supprimé la création de la table dans la procédure.

    Et ça tout fonctionne bien maintenant.

    Merci quand même de votre aide.

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

Discussions similaires

  1. Problème avec filtre et insertion dans la même Table
    Par lepeule dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/05/2010, 10h28
  2. Réponses: 4
    Dernier message: 13/03/2009, 13h55
  3. Réponses: 3
    Dernier message: 20/03/2008, 14h35
  4. [PDO] [SQLite] create table et insert impossible sous linux (ok sous windows)
    Par rebolon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/07/2007, 15h59
  5. Deux 'insert' dans la même table
    Par Arola78 dans le forum Access
    Réponses: 2
    Dernier message: 24/10/2006, 10h02

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