Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/02/2012, 14h53   #1
Nouveau Membre du Club
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 36
Points : 36
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
srede est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 15h05   #2
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Peux-tu nous mettre ta requête stp ?
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 10/02/2012, 15h09   #3
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
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.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/02/2012, 15h11   #4
Nouveau Membre du Club
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 36
Points : 36
Oui la voilà, c'est une procédure pour créer des valeurs aléatoires.

Code :
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à
srede est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 10/02/2012, 15h25   #5
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
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 :
 DBMS_OUTPUT.PUT_LINE(i);
Après pour le EXECUTE IMMEDIATE je connais pas trop..
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 10/02/2012, 15h28   #6
Nouveau Membre du Club
 
Inscription : octobre 2010
Messages : 28
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : octobre 2010
Messages : 28
Points : 36
Points : 36
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.
__________________
Le chien sans dents aboie plus fort.
srede est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h57.


 
 
 
 
Partenaires

Hébergement Web