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 :

Permettre un retour de valeur NULL dans une fonction


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué Avatar de bannik
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2003
    Messages : 191
    Points : 192
    Points
    192
    Par défaut Permettre un retour de valeur NULL dans une fonction
    Bonjour,

    J'ai une fonction stockée qui retourne un curseur. Je souhaite pourvoir retourner une valeur null si rien n'est trouvé. Or j'obtiens systématiquement une erreur ORA-06503: PL/SQL: Function returned without value ORA-06512.

    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
     
     FUNCTION nom_fonction(arg1 IN VARCHAR2, aret OUT VARCHAR2) RETURN t_cursor
         AS
            my_cursor t_cursor;
        BEGIN
            aret := 'NOK';
            OPEN my_cursor FOR SELECT * FROM ma_table;  
            aret := SQLCODE ||' - OK';   
     
            EXCEPTION
                    WHEN NO_DATA_FOUND
                    THEN
                        aret := SQLCODE ||' - NO DATA FOUND ';
                        RETURN NULL;
                    WHEN others
                    THEN
                    aret := SQLCODE ||' - An error was encountered - ERROR - '||SQLERRM;
                    RETURN NULL;  
        END nom_fonction;
    t_cursor est un type ref cursor.
    Comment ne pas générer ce message d'erreur?

    Merci

  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
    En PL/SQL utiliser des variables de retour de type OK/NOK pour savoir si la fonction s'est exécutée sans problème c'est ce que les anglais appel "poor programming style". Commencer par supprimer le paramètre en question et basez votre code sur le mécanisme des exceptions.

    Le fait d'ouvrir un curseur n'engage en rien l'obligation d'avoir une valeur retournée par le curseur. L'instruction open corresponde au parsing de la requête par le moteur SQL et à la création des structures nécessaires pour gérer ce curseur dans la PGA. Le seul statut disponible à ce moment pour le curseurs est: ouvert ou pas ouvert! Le statut (NOT)Found n'est disponible qu'après avoir faire le fetch.
    Une fonction qui renvoie un curseur devrait juste ouvrir le curseur et le passer au programme appelant. C'est ce programme qui doit ensuite décider quoi faire avec un curseur qui ne renvoie aucune valeur.

  3. #3
    Membre habitué Avatar de bannik
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2003
    Messages : 191
    Points : 192
    Points
    192
    Par défaut
    Rhalala c'est lundi c'est dur.

    J'ai oublié le return après l’exécution.

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

Discussions similaires

  1. remplacer les valeurs nulles dans une table
    Par jessy212 dans le forum Access
    Réponses: 4
    Dernier message: 28/08/2006, 13h22
  2. Réponses: 10
    Dernier message: 30/06/2006, 17h41
  3. clés et valeurs à null dans une HashMap typée
    Par Djakisback dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/06/2006, 13h04
  4. Comment gérer les valeur Nulles dans une requête ?
    Par sondo dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h02
  5. Affcecter une valeur NULL dans une requete paramétrée
    Par thiouwz2 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 15h02

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