Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 24/11/2011, 16h48   #1
Invité régulier
 
Inscription : octobre 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 16
Points : 6
Points : 6
Par défaut Create Table avec PRO*C avec nom de table dynamique

Bonjour à tous j'espère que je ne me trompe de section pour mon poste (je vais donc poster le même dans la section langage C).


J'utilise Pro*C et j'ai un problème avec une requête CREATE TABLE. Je m'explique:

Mon programme demande quel est le nom de ma variable mission, que je récupère tout bêtement avec un scanf.
Je veux alors créer une table où un de mes champs doit avoir comme valeur le char qui est le nom de la mission. Mais voila, la fonction qui doit créer la table ne la crée pas... Alors que quand je rentre cette variable en dur, cela fonctionne très bien. J'aimerais avoir un petit coup de pouce de votre part si c'est possible. Si ça se trouve j'essaie de faire quelque chose pas forcément possible.

Voila mon code de la fonction servant à lire la table:

Voila le code servant créer la fonction:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void creer_table1(char nom_mission[50])
{
 
EXEC SQL BEGIN DECLARE SECTION;
    VARCHAR TABLE[50];
EXEC SQL END DECLARE SECTION;
 
   strcpy(TABLE.arr,nom_mission);
   TABLE.len =strlen(TABLE.arr);
 
 
    EXEC SQL CREATE TABLE mission.msn_test AS
             SELECT * FROM mission.msn_mission
             WHERE missionname=:TABLE;
 
              printf("Table MSN_TEST creee dans le schema MISSION\n");
}

Merci d'avance pour votre aide.

PS:Je travaille sous code blocks et avec oracle
laurent_56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h00   #2
Invité régulier
 
Inscription : octobre 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 16
Points : 6
Points : 6
Je vois que personne n'utilise PRO*C de nos jours...
N'empêche, je suis toujours coincé avec ce truc.
laurent_56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 12h02   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 313
Points : 5 817
Points : 5 817
Commencez par afficher le contenu de la variable TABLE avant d’exécuter la requête.
Par ailleurs en C on déteste les noms des variables en majuscule les gens civilisés les utilise seulement pour les types ou les constantes.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 15h12   #4
Invité régulier
 
Inscription : octobre 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 16
Points : 6
Points : 6
Merci pour votre réponse, mais en fait c'est la balise code qui a mis toute seule table en majuscule.
J'ai donc changé la variable table, en l'apelant nom. De plus je l'ai déclaré en char *nom, ce qui m'autorise à ne plus utiliser le strcpy.
Du coup maintenant, j'ai une erreur qui me dit que les variables hotes ne sont pas autorisées dans une instruction DDL (visiblement create table en est une).
Est ce alors possible de passer outre? Via un chemin différent?
laurent_56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 15h24   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 313
Points : 5 817
Points : 5 817
Via sql dynamique. La doc pro*c contient pas mal des exemples.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 16h20   #6
Invité régulier
 
Inscription : octobre 2011
Messages : 16
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 16
Points : 6
Points : 6
Merci,
Je vais donc chercher de ce côté là. Mais je ne connais encore rien au sql dynamique.
Si éventuellement tu saurais coder la fonction:

Code :
1
2
3
4
5
6
7
8
9
10
11
void creer_table1(char nom_mission[50])
{
 
EXEC SQL BEGIN DECLARE SECTION;
    char *nom=nom_mission;
EXEC SQL END DECLARE SECTION;
 
 EXEC SQL CREATE TABLE mission.msn_test AS
         SELECT * FROM mission.msn_mission
         WHERE missionname=:nom;
}
En sql dynamique, je serais très reconnaissant, mais là je crois qu'il ne faut pas pousser^^

Je ne sais pas si ça marchera mais merci du conseil
laurent_56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 18h08   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 313
Points : 5 817
Points : 5 817
Oracle Dynamic SQL
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h46.


 
 
 
 
Partenaires

Hébergement Web