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 :

Create Package Body PKG_CUR retourne une erreur


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut Create Package Body PKG_CUR retourne une erreur
    Bonjour

    je veux créer un package qui me retourne une table : en soit le select peut se suffire à lui même mais j'aimerai comprendre pourquoi ,
    ce simple create package copie de multiple exemple du net retourne une erreur .

    La base est Oracle 12.1
    La table nomme existe sur le schema utilisée


    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 OR REPLACE PACKAGE BODY PKG_CUR
        IS
        FUNCTION Get_Raws RETURN TYP_REC_EMP
        IS
        tab DONNEES_FICHIERS;
        Begin
        -- Populate the collection --
        Select * Into tab from DONNEES_FICHIERS ;
        -- Return the collection --
        RETURN tab ;
        End ;
        END PKG_CUR ;
     
        /
    VOila ce que me retourne SQL DEV lorsque je lance ce code


    Erreur: PL/SQL: Compilation unit analysis terminated
    Erreur(1,14): PLS-00201: l'identificateur 'PKG_CUR' doit être déclaré
    Erreur(1,14): PLS-00304: impossible de compiler le corps de 'PKG_CUR' sans sa spécification
    la dernière erreur découle de la premier mais PKG_CUR n'est pas un indicateur ? c'est l'identifiant ne nom du package a créer.

    MErci pour vos explications

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    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 580
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Peux-tu formater ton code avec la balise code (l'icone #) ?

    En fait tu déclares un BODY sans avoir de SPEC

    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
     
    CREATE OR REPLACE PACKAGE PKG_CUR
    AS
     FUNCTION Get_Raws RETURN TYP_REC_EMP;
    END PKG_CUR;
    /
     
    CREATE OR REPLACE PACKAGE BODY PKG_CUR
    IS
    FUNCTION Get_Raws RETURN TYP_REC_EMP
    IS
    tab DONNEES_FICHIERS;
    Begin
    -- Populate the collection --
    Select * Into tab from DONNEES_FICHIERS ;
    -- Return the collection --
    RETURN tab ;
    End ;
    END PKG_CUR ;
    En fait, c'est la seconde erreur qui était importante
    PLS-00304: cannot compile body of 'PKG_CUR' without its specification

  3. #3
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut suite
    Je viens peux -être de comprendre

    Un package est un module de programmes incluant procédures et / ou fonctions fonctionnellement dépendantes.
    Un package est composé de 2 parties :
    - la spécification (introduite par ‘CREATE PACKAGE’) liste les entêtes de procédures et fonctions contenues dans le package.
    La zone déclarative
    - le corps du package (introduit par ‘CREATE PACKAGE BODY’) qui contient le code effectif des procédures et fonctions déclarées précédemment.
    La zone comportant le code

  4. #4
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut suite
    je lis divers docs sur pl-sql & Oracle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE OR REPLACE PACKAGE nompackage IS
    /*
    d e c l a r a t i o n s
    */
    Ici le terme de déclaration se limite a Quoi?
    Est-ce uniquement la définition des fonctions et ou procédure déifnit dans le corps du package ?
    Ou doit on y déclare
    les variables
    les types
    LEs tableaux ...

    ou doit on déclarer les variables que l'on souhaite utiliser dans les fonctions et procédures ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /*
    */
    END nomPackage ;
    /

    Si je veux utiliser dans la corps du package pour des calcul des opérations divers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    CREATE OR REPLACE PACKAGE BODY nompackage IS
    /*
    implementation
    */
    END nomPackage ;
    /

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    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 580
    Billets dans le blog
    4
    Par défaut
    La partie Spec est une partie déclarative des tout ce qui est accessible par un utilisateur (fonctions, procédures, variables, etc..)
    La partie Body est la partie interne (code des fonctions, procédures, etc...)

    Tu peux très bien avoir une fonction "interne" au package (c'est à dire uniquement dans le body), cette fonction ne pourra pas être appelée de l'extérieur (par MON_PACKAGE.MAFONCTION)
    Quand aux variables au niveau Spec, elles sont partagées par tout le package et même pour toute la session de l'utilisateur. Donc les variables locales aux procédures sont à coder dans les procédures, pas dans le package.

  6. #6
    Membre éclairé Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    Février 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : concepteur d'application
    Secteur : Santé

    Informations forums :
    Inscription : Février 2008
    Messages : 495
    Par défaut QUId
    Citation Envoyé par McM Voir le message
    La partie Spec est une partie déclarative des tout ce qui est accessible par un utilisateur (fonctions, procédures, variables, etc..)
    La partie Body est la partie interne (code des fonctions, procédures, etc...)

    Tu peux très bien avoir une fonction "interne" au package (c'est à dire uniquement dans le body), cette fonction ne pourra pas être appelée de l'extérieur (par MON_PACKAGE.MAFONCTION)
    Quand aux variables au niveau Spec, elles sont partagées par tout le package et même pour toute la session de l'utilisateur. Donc les variables locales aux procédures sont à coder dans les procédures, pas dans le package.
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     CREATE OR REPLACE PACKAGE PKG_NOM
    AS
     
      LN$V_DFI_NOM_FICHIER_CFT  DONNEES_FICHIERS.DFI_NOM_FICHIER_CFT%TYPE;
      LN$V_DFI_NOM_FICHIER_SEUL DONNEES_FICHIERS.DFI_NOM_FICHIER_SEUL%TYPE;
      LN$DFI_ID  DONNEES_FICHIERS.DFI_ID%Type   ;
     
     FUNCTION fic_es 
    ( PARM_DFI_NOM_FICHIER_CFT   in DONNEES_FICHIERS.DFI_NOM_FICHIER_CFT%TYPE ,
      PARM_TYPE_NORME   in DONNEES_FICHIERS.DEN_VERSION_NORME%TYPE,
      PARM_NORME in DONNEES_ENTITES.DEN_REFERENCE_NORME%TYPE
     ) return  DONNEES_FICHIERS.DFI_ID%TYPE;
     
    END PKG_NOM;
    /
     
    CREATE OR REPLACE PACKAGE BODY  PKG_NOM
     
      FUNCTION fic_es 
    ( PARM_DFI_NOM_FICHIER_CFT   in DONNEES_FICHIERS.DFI_NOM_FICHIER_CFT%TYPE ,
      PARM_TYPE_NORME   in DONNEES_FICHIERS.DEN_VERSION_NORME%TYPE,
      PARM_NORME in DONNEES_ENTITES.DEN_REFERENCE_NORME%TYPE
     
      )  V_DFI_ID DONNEES_FICHIERS.DFI_ID%TYPE;
    begin 
      LN$V_DFI_NOM_FICHIER_CFT := concat( trim(PARM_DFI_NOM_FICHIER_CFT) ,'%');
      LN$V_DFI_NOM_FICHIER_SEUL  := concat('%' , trim(V_DFI_NOM_FICHIER_CFT));  
      LN$V_DFI_NOM_FICHIER_SEUL  :=concat(PARM_TYPE_NORME , trim(V_DFI_NOM_FICHIER_CFT));  
      LN$V_DFI_NOM_FICHIER_SEUL  := concat('%' , trim(V_DFI_NOM_FICHIER_CFT));   
      select dfi_id into V_DFI_ID
        from DONNEES_FICHIERS  
        where DFI_NOM_FICHIER_CFT like  V_DFI_NOM_FICHIER_CFT
        and dfi_nom_fichier_seul like V_DFI_NOM_FICHIER_SEUL;
       return( V_DFI_ID);
    end  
     
    END PKG_NOM;
     
    /


    ou est l'erreur?

    Erreur(3,3): PLS-00103: Symbole "FUNCTION" rencontré à la place d'un des symboles suivants : is as compress compiled wrapped Symbole "is" a été substitué à "FUNCTION" pour continuer.
    Erreur(4,33): PLS-00103: Symbole "DONNEES_FICHIERS" rencontré à la place d'un des symboles suivants : ( Symbole "(" a été substitué à "DONNEES_FICHIERS" pour continuer.
    Erreur(5,24): PLS-00103: Symbole "DONNEES_FICHIERS" rencontré à la place d'un des symboles suivants : ( Symbole "(" a été substitué à "DONNEES_FICHIERS" pour continuer.
    Erreur(6,17): PLS-00103: Symbole "DONNEES_ENTITES" rencontré à la place d'un des symboles suivants : ( Symbole "(" a été substitué à "DONNEES_ENTITES" pour continuer.
    Erreur(8,6): PLS-00103: Symbole "V_DFI_ID" rencontré à la place d'un des symboles suivants : ) , and or
    Erreur(21,1): PLS-00103: Symbole "END" rencontré à la place d'un des symboles suivants : ; <identificateur> <identificateur entre guillemets> current delete exists prior <une chaîne SQL entre apostrophes>

    Les variables s’appuient sur des tables existant dans le schema

Discussions similaires

  1. shell retourne une erreur
    Par nymus7 dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2008, 19h03
  2. [MySQL] requete qui retourne une erreur a l'execution
    Par naazih dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/05/2008, 13h59
  3. Requete SQL qui retourne une erreur
    Par gregal dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/03/2008, 00h05
  4. Réponses: 8
    Dernier message: 05/02/2008, 12h35
  5. [MSSQL 2005] Retourner une erreure dans une SP
    Par Danny Blue dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/08/2006, 09h19

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