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

Oracle Discussion :

Create Table avec PRO*C avec nom de table dynamique


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 14
    Points
    14
    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 : 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
    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

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    Je vois que personne n'utilise PRO*C de nos jours...
    N'empêche, je suis toujours coincé avec ce truc.

  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
    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.

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    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?

  5. #5
    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
    Via sql dynamique. La doc pro*c contient pas mal des exemples.

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    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

Discussions similaires

  1. Changer le nom d'une table sur SQL server avec une requete
    Par Oluha dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 01/02/2014, 23h35
  2. [PRO*C] Problème avec CREATE TABLE et nom de table dynamique
    Par laurent_56 dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 24/11/2011, 18h06
  3. Réponses: 0
    Dernier message: 18/04/2011, 13h02
  4. nom de table et de champs avec des espaces
    Par grinder59 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/05/2006, 17h30
  5. Comment je peux changer nom de 'Table' avec la phrase sql
    Par YEK dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/10/2004, 08h38

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