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

SQL Firebird Discussion :

Problème avec une procedure stockée


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut Problème avec une procedure stockée
    Bonsoir,

    J'ai créer un procedure stockée sous IBEXPERT mais je n'arrive pas à l'executer :
    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
     
    CREATE PROCEDURE TEST 
    as
    declare variable num_jour integer;
    declare variable var_jour char(10);
    begin
        FOR SELECT JOUR FROM base_tb_calendrier WHERE MOIS=1 into :num_jour
        DO
        BEGIN
        var_jour=CAST(num_jour as varchar(2));
        EXECUTE STATEMENT 'ALTER TABLE PA_TB_POINTAGE_MENS ADD '||var_jour||' VARCHAR(2)';
        END
     END^
     
    SET TERM ; ^
    A l'execution IBEXPERT me donne le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Invalid token.
    Dynamic SQL Error.
    SQL error code = -104.
    Token unknown - line 1, column 37.
    1.
    Cette SP doit créer dynamiquement des champs dans une table et je ne sais pas ou se situe l'erreur.

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 695
    Billets dans le blog
    65
    Par défaut
    hum !

    la variable var_jour ne semble pas être initialisée ou plutôt est mal initialisée

    (la position indiquée par l'erreur correspond parfaitement , si l'on considère que la "phrase" du EXECUTE STATEMENT)

    tu es sur qu'un nom de colonne peut commencer par un chiffre ?

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 947
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    tu es sur qu'un nom de colonne peut commencer par un chiffre ?
    +1
    The following limitations on naming database objects must
    be observed:
    * Start each name with an alphabetic character (A–Z or a–z).

  4. #4
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Bonjour,

    Je ne sais pas ce que vous cherchez à faire, mais ça me parait étrange de vouloir modifier une table dans une procédure stoqué.

    Toujours est il si vous voulez avec un nom de colonne numérique il vous faudra mettre le nom entre double quote. (Pour les select apres également).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE PROCEDURE TEST 
    AS
    declare variable num_jour integer;
    declare variable var_jour char(10);
    begin
        FOR SELECT JOUR FROM base_tb_calendrier WHERE MOIS=1 INTO :num_jour
        DO
        BEGIN
        var_jour=CAST(num_jour AS varchar(2));
        EXECUTE STATEMENT 'ALTER TABLE PA_TB_POINTAGE_MENS ADD "'||var_jour||'" VARCHAR(2)';
        END
     END^
     
    SET TERM ; ^
    Cordialement

  5. #5
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Bonjour,

    Citation Envoyé par SergioMaster
    tu es sur qu'un nom de colonne peut commencer par un chiffre ?
    Oui le nom de colonne est un Integer.

    Citation Envoyé par SergioMaster
    la variable var_jour ne semble pas être initialisée ou plutôt est mal initialisée
    Je l'ai remis à VARCHAR.

    Citation Envoyé par Barbibulle
    Je ne sais pas ce que vous cherchez à faire, mais ça me parait étrange de vouloir modifier une table dans une procédure stoqué.
    Je cherche a creer des champs jours(1,2,3...,31) pour un mois donnée et dont je ne connais pas le début c'est a dire je ne saurais pas à partir de quel jour de ce mois devais commencer dans la table ce sera défini par l'utilisateur.
    Cette table pourra contenir les champs jours d'un seul mois (du 1 au 31) ou une partie du mois en cours plus une partie du mois qui suit (ex : du 25/02/08 au 24/03/08). Bien entendu ca ne se fera qu'une seule fois dans l'année et cette table sera vide au départ.

    Citation Envoyé par Barbibulle
    il vous faudra mettre le nom entre double quote
    Je l'ai essayer.

    En tout les cas l'EXECUTE STATEMENT fonctionne bien tout seul ca me creer des champs.

    Merci.

  6. #6
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Citation Envoyé par freud Voir le message
    Je cherche a creer des champs jours(1,2,3...,31) pour un mois donnée et dont je ne connais pas le début c'est a dire je ne saurais pas à partir de quel jour de ce mois devais commencer dans la table ce sera défini par l'utilisateur.
    Cette table pourra contenir les champs jours d'un seul mois (du 1 au 31) ou une partie du mois en cours plus une partie du mois qui suit (ex : du 25/02/08 au 24/03/08). Bien entendu ca ne se fera qu'une seule fois dans l'année et cette table sera vide au départ.
    Il y a surement un problème dans ce design... Ce n'est pas relationnel, en plus coté code ce sera pas de la tarte de bosser avec des tables qui ont jamais les mêmes colonnes.
    Je suis sûr que vous êtes dans l'erreur, mais c'est mon avis.

  7. #7
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    je précise un peu....

    Je cherche à faire une table de pointage de paie avec une période mensuelle de paie defini au début de l'année par l'utilisateur.
    Cette table là contiendra des champs numero du jour représentant un evenement (T=Travailler,F=Férie,A=Absence et d 'autre) avec en plus le matricule de l'employé. Ces evenement seront rapatrier a chaque cloture de mois depuis une autre table calendrier déjà generer au debut de l'année contenant des informations entre autres ces evenements. La tables des pointages sera vider à chaque cloture lors de la bascule en reprennant les informations pour la période suivantes. Voilà et quant à :

    Citation Envoyé par _skip
    Il y a surement un problème dans ce design... Ce n'est pas relationnel
    D'apparence oui ce n'est pas relationel puisque cette table je la considère comme une table temporaire oû je pourrais entrer des informations, les sommer et les stocker dans une autre table puis de la vider.

    Citation Envoyé par _skip
    en plus coté code ce sera pas de la tarte de bosser avec des tables qui ont jamais les mêmes colonnes.
    Cette table fait partie d'une BD contenant 45 tables relier entres elles par des foreign key avec des mêmes nom de champs donc je n'ai pas de problème relationnel.

    Je souhaitais juste savoir le pourquoi mon code ne fonctionne pas.

    Merci.

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

Discussions similaires

  1. [VB.NET 2.0] - Problème avec une procédure stockée
    Par Khrysby dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/05/2007, 15h25
  2. Probleme avec une procedure stocké avec IF
    Par el_quincho dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/10/2006, 16h21
  3. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04
  4. Récupération des paramètres avec une procedure stockée
    Par samlerouge dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2004, 22h00
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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