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 :

Curseur dans une Fonction


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 53
    Par défaut
    Bonjour,

    Est-il possible de mettre un curseur dans une fonction créée sur le serveur ?
    Si oui, quel est la syntaxe ?

    J'ai essayé ça, mais ça ne marche pas :
    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
    CREATE OR REPLACE FUNCTION StatQuartier (num IN NUMBER)  
    RETURN NUMBER IS tot NUMBER;
    DECLARE
    tmp number;
    CURSOR cur (id_demande number, coutmat NUMBER, tauxhor NUMBER, nbh NUMBER) 
          IS SELECT distinct d.id, nvl(d.coutmat,0) , nvl(tauxhor,0) , sum(t.nbheure)
              FROM demande d, realiser r , traiter t
              WHERE d.id = t.id_demande (+)
              and d.id = r.id_demande (+)
              and d.id_quartier =  num
              and d.provenance in ('AlloNarbonne','Téléphone','Mail')
              and lower(r.etat) in ('refusée','terminée') 
              GROUP BY d.id, nvl(d.coutmat,0), nvl(tauxhor,0);
    BEGIN
      tot := 0;
           For cur IN ligne Loop
           tot := tot + ligne.coutmat + ligne.tauxhor * ligne.nbh; 
         End loop ; 
      RETURN (tot); 
    END;
    /
    J'ai une erreur sur la troisième ligne (sur le declare) et je ne comprends pas pourquoi, un curseur se déclare bien dans la partie DECLARE ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    Dans la déclaration des fonctions, il n'y a pas de declare, c'est le IS qui assure ce rôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE FUNCTION StatQuartier (num IN NUMBER)  
    RETURN NUMBER IS 
    tot NUMBER;
    tmp number;
    CURSOR cur (id_demande number, coutmat NUMBER, tauxhor NUMBER, nbh NUMBER);
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE FUNCTION StatQuartier (num IN NUMBER)  
    RETURN NUMBER IS tot NUMBER;
    DECLARE
    tmp number;
    CURSOR cur (id_demande number, coutmat NUMBER, tauxhor NUMBER, nbh NUMBER);

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 53
    Par défaut
    Ok merci pour ta réponse

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

Discussions similaires

  1. Retourné resultat curseur dans une fonction
    Par L8O8L dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/06/2007, 22h09
  2. [PL/SQL] Traitement d'un curseur dans une fonction
    Par ruda.tom dans le forum Oracle
    Réponses: 1
    Dernier message: 24/10/2005, 22h06
  3. Obtenir la position du curseur dans une Image
    Par bastoune dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/11/2003, 21h02
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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