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 :

Fonction qui prend un parametre


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut Fonction qui prend un parametre
    Bonjour,

    Voila le code de ma fonction (dans un package) :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FUNCTION f_pc_es_02_02 (in_code_postal VARCHAR2)
          RETURN curseur
       IS
          c1   curseur;
       BEGIN
       	  /* */
          OPEN c1 FOR    'SELECT COM_CODE_INSEE, LIB_COM,ALT FROM COMMUNE,TABALT WHERE COMMUNE.COM_CODE_INSEE = TABALT.CINSEE AND COM_CODE_POSTAL = '
                      || in_code_postal
                      || ' ORDER BY LIB_COM ASC;';
     
          /* */
          RETURN c1;
       END f_pc_es_02_02;
    lorsque je l'appel j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLException parametre IN ou OUT absent dans l'index
    (ou quelque chose d'approchant)

    quelqu'un pourrait me corriger???

    merci

    hOAx punK

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 567
    Points
    19 567
    Billets dans le blog
    25
    Par défaut
    Essayez avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FUNCTION f_pc_es_02_02 (in_code_postal IN VARCHAR2)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    merci mais sa ne fonctionne pas mieu voila ce que me dit SQLplus :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select PK_PORTAIL_CLIENTS.F_PC_ES_02_02('45100') from dual;
    select PK_PORTAIL_CLIENTS.F_PC_ES_02_02('45100') from dual
                                                          *
    ERREUR Ó la ligne 1 :
    ORA-04061: Útat existant de package "PCA.PK_PORTAIL_CLIENTS" invalidÚ
    ORA-04065: package "PCA.PK_PORTAIL_CLIENTS" a ÚtÚ modifiÚ ou abandonnÚ - non
    exÚcutÚ

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Essayez de nous donner un scénario réduit permettant de reproduire l'erreur:
    - avec la structure de la table
    - le code compilable de la procédure

    et de nous donner l'erreur Oracle exacte que vous avez.

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    ERREUR Ó la ligne 1 :
    ORA-04061: Útat existant de package "PCA.PK_PORTAIL_CLIENTS" invalidÚ
    ORA-04065: package "PCA.PK_PORTAIL_CLIENTS" a ÚtÚ modifiÚ ou abandonnÚ - non
    exÚcutÚ
    Vous avez des erreurs de compilation: il faut les affichers avec show errors ou votre outil de développement.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    j'ai du regler le pb de compilation, parceque maitnenant j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL> select PK_PORTAIL_CLIENTS.F_PC_ES_02_02('45100') from dual;
    select PK_PORTAIL_CLIENTS.F_PC_ES_02_02('45100') from dual
           *
    ERREUR Ó la ligne 1 :
    ORA-00911: CaractÞre non valide
    ORA-06512: Ó "PCA.PK_PORTAIL_CLIENTS", ligne 574

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    On peut pas vous aider à résoudre votre poblème avec des fragments de code

    Au début la fonction doit retourner un "curseur" (comment est défini ce type ?) et maintenant qu'est-ce qu'elle est censée retourner ? Quelle est la structure de la table ? Quel est le code complet complet de la fonction ?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    bah le code complet de la fonction est dans le prmier poste ensuite elle est contenue dans un 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
     
    CREATE OR REPLACE PACKAGE pk_portail_clients
    IS
       /* Declaration du type curseur*/
       TYPE curseur IS REF CURSOR;
     
    /*  */
       FUNCTION f_pc_es_02_02 (in_code_postal IN VARCHAR2)
          RETURN curseur;
     
    END pk_portail_clients;
    /
    CREATE OR REPLACE PACKAGE BODY pk_portail_clients
    AS
     
     /*  */
       FUNCTION f_pc_es_02_02 (in_code_postal IN VARCHAR2)
          RETURN curseur
       IS
          c1   curseur;
       BEGIN
       	  /* */
          OPEN c1 FOR    'SELECT COM_CODE_INSEE, LIB_COM,ALT FROM COMMUNE,TABALT WHERE COMMUNE.COM_CODE_INSEE = TABALT.CINSEE AND COM_CODE_POSTAL = '
                      || in_code_postal
                      || ' ORDER BY LIB_COM ASC;';
     
          /* */
          RETURN c1;
       END f_pc_es_02_02;
     
    END pk_portail_clients;
    /
    Les tables :

    commune
    COM_COD_INSEE, COM_CODE_POSTAL, LIB_COM

    tabalt
    CINSEE, ALT

    FK sur COM_CODE_INSEE et CINSEE

  9. #9
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    L'erreur 0911 vient probablement du ';' qu'il faut supprimer:

    || ' ORDER BY LIB_COM ASC;';
    .

  10. #10
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Vous devriez aussi appeler votre fonction de la façon suivante en sqlplus car votre fonction retourne un curseur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    VARIABLE rc REFCURSOR
    EXECUTE :rc := PK_PORTAIL_CLIENTS.F_PC_ES_02_02('45100');
    PRINT rc

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    merci c'etait bien le ';' qui ne fonctionnais pas.

    merci encore

  12. #12
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Raison pour laquelle, lorsque l'on fait du SQL dynamic (requête stockée dans une variable), il faut toujours la sauvegarder dans une colonne de table pour pouvoir la "jouer" en direct sous Toad, SqlDeveloper ou Sql*Plus.

  13. #13
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    J'ajouterai que nous ne sommes pas là pour réfléchir à votre place et que les erreurs de syntaxe sont prohibées sur le forum.

    Merci de votre compréhension

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2012, 21h33
  2. sql dynamique fonctions qui prend en parametre une table
    Par cedro dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/07/2011, 09h33
  3. Réponses: 3
    Dernier message: 21/01/2008, 14h38
  4. Création d'une fonction qui prend en argument une liste de cellule
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2007, 20h49
  5. Réponses: 12
    Dernier message: 03/08/2007, 15h43

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