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

PL/SQL Oracle Discussion :

ORA-44002 sur un corps de fonction


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2016
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juillet 2016
    Messages : 176
    Points : 88
    Points
    88
    Par défaut ORA-44002 sur un corps de fonction
    Bonjour,

    J'ai une erreur de syntaxe ORA-4402 "nom d'objet non valide" avec ce corps de fonction mais je la ligne où se situe l'erreur n'est pas indiquée. Auriez-vous une idée de quelle ligne s'agit-il ?

    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
    27
    DECLARE 
      X VARCHAR2(32767);
    BEGIN
      X := '
      SELECT to_char(days.n, ''DD/MM/YYYY HH24'') as name,
             NVL(ROUND(AVG(s1.HIGH),2),-1) HIGH
      FROM  (SELECT TO_DATE('''||:P8_DATE_DEBUT||''', ''DD/MM/YYYYHH24'')+(level-1)/TO_NUMBER('''||:P8_ECHELLE||''') as n
             FROM   dual
             CONNECT BY level <= TO_DATE('''||:P8_DATE_FIN||''', ''DD/MM/YYYYHH24'')+1-TO_DATE('''||:P8_DATE_DEBUT||''', ''DD/MM/YYYYHH24''))*TO_NUMBER('''||:P8_ECHELLE||''')      
            ) days
            LEFT OUTER JOIN
            (SELECT trunc(RAW_DATE, :P8_TRUNC) as HO,
                    NVL(ROUND(AVG(VALID_VALUE),2), 0) as HIGH
             FROM  '||
                   dbms_assert.sql_object_name('SAFEGE.MSR_'||NVL(:P8_ECHELLE_EMMA,'4245')) -- NVL better than COALESCE for a simple Null check
                   ||'@EMMASAFE.NTSIVOA'
                   ||'
             WHERE RAW_DATE >= TO_DATE('''||:P8_DATE_DEBUT||''', ''DD/MM/YYYY'')  -- avoiding BETWEEN means less messing about with time components
             AND   RAW_DATE <  TO_DATE('''||:P8_DATE_FIN||''', ''DD/MM/YYYY'')+1  -- just need to use less than target date+1 instead
             AND   VALIDITY = 1
             GROUP BY trunc(RAW_DATE, '''||:P8_TRUNC||''') 
            ) s1
            ON days.n = S1.HO
      GROUP BY days.n
      ORDER BY days.n';
      RETURN X;
    END;
    Je suis sous Oracle 12.1

    Bien cordialement,
    Christian

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    décembre 2019
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : décembre 2019
    Messages : 729
    Points : 1 168
    Points
    1 168
    Par défaut
    Bonjour,

    Il faut que tu exécutes la requête hors du bloc, en ayant remplacé les variables par les valeurs que tu appliques normalement.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2016
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : juillet 2016
    Messages : 176
    Points : 88
    Points
    88
    Par défaut
    C'est-à-dire que je dois remplacer les variables par leur valeur et essayer le tout dans une requête SQL ?

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    juillet 2003
    Messages
    4 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : juillet 2003
    Messages : 4 530
    Points : 7 629
    Points
    7 629
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Vu que la corps de la fonction ne fait qu'une seule chose qui accède au modèle de données, c'est forcément cette instruction qui plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     dbms_assert.sql_object_name('SAFEGE.MSR_'||NVL(:P8_ECHELLE_EMMA,'4245'))
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

Discussions similaires

  1. Erreur ORA 06502 sur fonction
    Par khomar dans le forum Oracle
    Réponses: 2
    Dernier message: 14/12/2010, 16h15
  2. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42
  3. Erreur ORA-01036 sur un XMLGRAM
    Par sch dans le forum XMLRAD
    Réponses: 5
    Dernier message: 07/09/2004, 14h56
  4. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29
  5. Détecter l'appui sur la touche de fonction F2
    Par titiyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 18/06/2003, 11h07

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