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

Interfaces de programmation Oracle Discussion :

[PRO*C] Problème de compilation


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut [PRO*C] Problème de compilation
    Bonjour,

    J'ai une requête SQL fonctionnel, notamment sous Toad, mais qui ne complile en PRO*C.

    J'ai déjà vu ce problème et il est lié apparament à une différence de version entre les langages SQL.

    Maintenant, ayant récemmennt sorti de l'école et ayant une pauvre expérience du SQL je vous avoue que je suis perdu quand on me dit de revenir à une vielle version du langage, surtout que j'ai déjà du pas mal chercher pour obtenir cette requête fonctionnel.

    Si vous pouvez m'aider j'en serais fortement reconnaissant. Juste me dire la technique à utiliser pour transformer la requête que voici :

    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
    26
     
    	EXEC SQL WHENEVER SQLERROR DO OracleDBError();
     	EXEC SQL WHENEVER NOT FOUND CONTINUE;
     	EXEC SQL INSERT INTO rating_score_his 
     			(
     				person_idn,
              			rating_model,
              			model_var,
              			model_value,
              			rating_score_seq,
              			request_number,
              			last_update_user,
              			seq_num
                            )
       		SELECT person_idn,
              		rating_model,
              		model_var,
              		model_value,
              		rating_score_seq,
              		request_number,
              		last_update_user,
              		(SELECT nvl(max(seq_num), 0)+1
                 			FROM rating_score_his
                			WHERE rating_score_his.person_idn = rating_score.person_idn
                      		AND rating_score_his.rating_model = rating_score.rating_model)
        		 FROM rating_score;
    Où la partie suivante est le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (SELECT nvl(max(seq_num), 0)+1
                 			FROM rating_score_his
                			WHERE rating_score_his.person_idn = rating_score.person_idn
                      		AND rating_score_his.rating_model = rating_score.rating_model)
    Merci beaucoup,
    Albin Gilles.

  2. #2
    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
    Executez la requête via SQL dynamique.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Merci de votre réponse mais... Qu'est ce que cela veut dire?

    J'ai trouvé des méthodes de SQL dynamique sur un papier oracle mais je vois pas en quoi cela m'aiderait.

    Pour l'information, je transforme une requête qui utilisait un curseur pour effecter le travail mais qui prenait 50min pour insérer environ 900.000 lignes.

    Merci beaucoup,
    Albin.

  4. #4
    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
    En Proc*C vous pouvez exécuter des sql dynamique ; ça reviens à stocker votre requête dans une variable tableau des caractères et l'exécuter via des appels dynamiques. Normalement on utilise cette méthode pour exécuter des ordres sql qui changent en fonction de diverses conditions à l’exécution du programme. Mais, dans ce cas c'est juste une astuce pour empêcher le compilateur d'analyser une requête SQL ayant une syntaxe inconnue pour lui.
    La documentation d'Oracle pour le Pro*C contient des explications et des exemples assez détaillés sur le SQL dynamique.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    D'accord, merci beaucoup pour votre réponse. Je vais essayer ça de suite!

    Albin.

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    La requete en question ne présente rien de particuliers (comme certaines expression analytiques non supportées par PRO*C)...

    C'est quoi le message d'erreur ? Car il n'y a aucune raison que la requete ne passe pas..
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Syntax error at line 123, COLUMN 21, file DeleteRating_AGI.pc:
    Error at line 123, COLUMN 21 IN file DeleteRating_AGI.pc
                            (SELECT nvl(max(seq_num), 0)+1
    ....................1
    PCC-S-02201, Encountered the symbol "nvl" when expecting one of the following:
     
       ( ) * + - / . @ | at, day, hour, minute, month, second, year,
    The symbol "(" was substituted FOR "nvl" TO continue.
    Et il fait le même genre d'erreur avec à peu près tous les symboles du SELECT en question.

    Sinon, j'ai essayé via une méthode de SQL dynamique (la première selon la documentation d'oracle) et cela compile et s'exécute correctement. Donc un grand merci mnitu !

    La requête ne fait pas exactement ce que je veux mais ca, c'est un autre problème .

    Je passe en résolu mais si vous trouvez une solution au problème, c'est probablement mieux de pouvoir mettre la requête sans la méthode de SQL dynamique, sinon tant pis.

    Encore merci,
    Albin.

  8. #8
    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
    Citation Envoyé par Vincent Rogier Voir le message
    La requete en question ne présente rien de particuliers (comme certaines expression analytiques non supportées par PRO*C)...

    C'est quoi le message d'erreur ? Car il n'y a aucune raison que la requete ne passe pas..
    Si, la sous-requête scalaire!

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

Discussions similaires

  1. Problème de compilation visual studio 2008 pro
    Par kek's dans le forum VB.NET
    Réponses: 3
    Dernier message: 10/02/2011, 10h47
  2. [PRO*C] Problèmes de compilation
    Par seanbean dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 04/01/2011, 22h17
  3. [PRO*C] Problème de compilation
    Par sacan dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 29/12/2010, 09h41
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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